我看不出我的问题在哪里,对于一个非常简单的示例,此代码可以正常工作,但是当我开始使用实际数据时,遇到了问题。
我基本上是从各种csv文件中提取某些数据,并试图最终将它们组合到单个数据帧中。
相关的代码如下:
wavenames = ['W1_', 'W2_', 'W3_']
logs=['log1','log2','log3','log4']
for w in wavenames:
AllSynt = pd.DataFrame(index=range(6341), columns=['X']+logs)
AllSynt['X']=z # an array extracted from elsewhere
print AllSynt.head(3)
for f in files:
for l in logs:
if (f.startswith('Synthetic_'+w)) & (f.endswith(l+'.csv')):
df = pd.read_csv(path+f,delimiter=',')
AllSynt = pd.DataFrame(AllSynt)
AllSynt = AllSynt.merge(df,how='left',on='X')
AllSynt = AllSynt.rename(columns = {'Y':l}, inplace = True)
print '\n', AllSynt.head(5)
但这给了我AttributeError: 'NoneType' object has no attribute 'head'
(在确保在循环开始时AllSynt是一个熊猫数据帧之前,我遇到了同样的错误(只是说它没有属性“ merge”)。为什么我的AllSynt数据帧永久变成了None
?
您将需要重写以下行:
AllSynt = AllSynt.rename(columns={'Y':l}, inplace=True)
简单地如下:
AllSynt.rename(columns={'Y':l}, inplace=True) # No assigning with inplace parameter
# (or)
AllSynt = AllSynt.rename(columns={'Y':l}) # assign without inplace parameter
当您指定inplace=True
并希望查看其内容时,它将返回,None
因为它们仅对进行了突变,DF
而不是为其创建新副本。基本上,您是在分配None
结果,因此它抱怨,AttributeError
因为它pd.DataFrame
不再是访问该.head()
方法的对象。
相似的类比可以通过做可以观察到list.append()
,list.sort()
在纯Python等操作,而其分配结果在同一行的变量,这也将返回None
出于同样的原因,因为他们工作inplace
在默认情况下。
编辑:添加了一个圆括号。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句