为什么我的熊猫数据框变成了“无”#39;类型?

时间:2017-02-27 06:08:14

标签: python pandas

我无法看到我的问题在哪里,这个代码适用于一个非常简单的例子,但是当我开始使用我的真实数据时,我遇到了问题。

我基本上从各种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是循环开始时的pandas数据帧之前,我得到了同样的错误(只是说它没有属性' merge')。为什么我的AllSynt数据帧永久变成{ {1}}?

1 个答案:

答案 0 :(得分:3)

您需要重写该行:

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()方法。

通过在纯python中执行list.append()list.sort()等操作,同时将它们的结果分配给同一行中的变量,可以观察到类似的类比,同样也会返回None原因是他们默认运行inplace