DataFrame对象没有属性“append”,导致出现AttributeError错误。

3
我正在尝试为我的垃圾邮件分类器创建一个DataFrame对象。它应该包含两列:'messages'和'class'。然而,当我使用dataframe.append函数将电子邮件作为'messages'添加到我的数据框中,并将文件夹名称作为'class'时,我遇到了这个错误:

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

为此,我最初创建了一个Dataframe,如下所示:data = DataFrame({'message': [], 'class': []}) 我尝试使用DataFrame.append()函数将垃圾邮件和正常邮件添加到DataFrame中。以下是我使用的代码:
data = DataFrame({'message': [], 'class': []})

data = data.append(dataFrameFromDirectory('D:\email_classifier\spam', 'spam'))
data = data.append(dataFrameFromDirectory('D:\email_classifier\ham', 'ham'))

理论上,这应该将电子邮件和文件夹名称添加到数据中。 有没有办法避免使用旧版本的pandas来解决这个问题?

请使用pd.concat代替。 - cs95
实际上,我认为这个问题值得重新开放,并添加一些关于为什么会出现错误的信息,因为假设人们会将这个属性错误粘贴到谷歌中并搜索,最终会来到这里。 - cs95
参见:逐行追加创建Pandas数据框架 - Karl Knechtel
1个回答

5

pandas >= 2.0: append已被移除,请使用pd.concat

DataFrame.append在版本1.4中已被弃用,并在版本2.0中从pandas API中完全删除。

请参阅Deprecations文档以及最初提出其弃用的this github issue

其移除的原因是为了防止在循环中迭代增长DataFrame(这通常是人们使用append的方式)。这是因为append在每个阶段都会生成一个新副本,导致内存呈二次复杂度。

在没有append的情况下,如果您的数据是逐行增长的,则正确的方法是将其累积到记录列表(或DataFrame列表)中,并在最后将其转换为一个大的DataFrame。

accumulator = []
for args in arg_list:
    accumulator.append(dataFrameFromDirectory(*args))

big_df = pd.concat(accumulator)

参考资料:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接