最近在学习pandas,计算哑变量一节,在敲以下代码的时候,出现了报错:
df = DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'b'], 'data1': range(6)})
dummies = pd.get_dummies(df['key'], prefix='key')
df_with_dummies = df['data1'].join(dummies)
报错:
AttributeError: 'Series' object has no attribute 'join'
意思大概就是Sereies对象没有join()这个方法。仔细检查之下,才发现原来是第二行代码少敲了一对中括号:
dummies = pd.get_dummies(df[['key']], prefix='key')
这引发了我对pandas数据结构类型的思考,为什么这里要加两对中括号?
试验了一下:
type(df['data1'])
Out: pandas.core.series.Series
type(df[['data1']])
Out: pandas.core.series.Dataframe
原来,对于一个Dataframe,对其取索引时,加一对中括号代表将某一列以Series的类型取出,而要想以Dataframe的类型取出,则需要加两对中括号。
回到一开始的报错就是,Series对象没有join()方法,这是属于Dataframe对象才有的。