AttributeError:'Pandas'对象没有属性'DataFrame'

时间:2016-10-04 11:58:07

标签: python pandas dataframe attributeerror

我正在尝试使用itertuples()循环中的pandas.DataFrame中的to_csv方法将数据帧对象的每一行写入新的csv。但是,每当我在行对象上调用DataFrame时,我都会收到以下错误。

AttributeError:'Pandas'对象没有属性'DataFrame'

关于同一错误的其他问题表明这可以做到:

1)DataFrame的错误大写,即数据帧或Dataframe 2)或大熊猫本身的问题,安装过程中的错误等。

我知道它不是1)因为我已经写了DataFrame,如错误信息中所示。此外,我不认为它是2)因为我可以运行pandas.read_csv来导入数据帧,然后在这些对象上运行方法而没有任何问题。

所以,我的问题是:

1)是否有另一个可能的问题来源,可能源于尝试在循环中的行上应用该方法?

2)如何验证pandas及其所有方法是否安装正确?所以我可以消除2)作为一种可能性。

for row in df.itertuples():
        if not os.path.isfile(path):
           row.DataFrame.to_csv(path, index=False, mode='w', header=headers)
        elif os.path.isfile(path):
           row.DataFrame.to_csv(path, index=False, mode='a')

AttributeError                            Traceback (most recent call last)
<ipython-input-192-0af973f1c147> in <module>()
     39                         row.DataFrame.to_csv(path, index=False, mode='w
, header=headers)
     40                 elif os.path.isfile(path):
---> 41                         row.DataFrame.to_csv(path, index=False, mode='a
)

AttributeError: 'Pandas' object has no attribute 'DataFrame'

我尝试删除itertuples()循环并替换为应用于数据框的函数。功能是:

df.apply(lambda x: df.loc[x].to_csv(''.join([dir,'-'.join([df.iloc[x][3],df.iloc[x][5],df.iloc[x][4],df.iloc[x][0]]),'.csv'])

嵌套连接方法组成每行内值的路径。我已经针对各种行测试了这个并且它工作正常,但是现在我在函数行上遇到以下错误:

type error: ('unorderable types: str() >= int()', 'occurred at index 0') 

这是什么意思?它试图订购什么?为什么?

1 个答案:

答案 0 :(得分:0)

尝试将Outlook邮件数据加载到数据框中时,我有相同的体验。 在下面的代码中,您可以找到一种简单的方法来克服输入数据丢失/ message.To 在此示例中./。

import win32com.client
import pandas as pd
outlook =win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder(5)
messages = inbox.Items
message = messages.GetFirst()
df2 = pd.DataFrame([[' ',' ',' ']],columns=list('ABC'))
i=1
while message:
    try:
        df2.loc[i]=(message.Subject,message.SenderEmailAddress,message.To) 
        i=i+1
    except:
        print("Error!")
        df2.loc[i]=(message.Subject,message.SenderEmailAddress,"Üres")
        i=i+1
    message = messages.GetNext()