首页 > 解决方案 > AttributeError:“set”对象没有属性“to_csv”

问题描述

今天是个好日子!我有 2 个带有数字的文件 txt 和 csv,我想比较并从第一个文件中删除与第二个文件中的数字匹配的数字。Data 和 df_row 是数据报。

例如:我的第一个文件包括

12354564
25345754
23545454
11565654
46456456

我的第二个文件包括

23545454
11565654
46456456

所以结果应该是

12354564
25345754

我的代码:

result = set(data).difference(set(df_row))
result.to_csv("part1left.txt")

但有一个错误 AttributeError: 'set' object has no attribute 'to_csv'

标签: python-3.xpandas

解决方案


如果您data的解决方案需要将输出转换为,然后再转换为:df_rowSerieslistSeries

result = set(data).difference(set(df_row))
pd.Series(list(result)).to_csv("part1left.txt", index=False)

或者在纯 python中将 set 写入文件:

result = set(data).difference(set(df_row))
with open("part1left.txt", 'w') as file_handler:
    for item in result:
        file_handler.write("{}\n".format(item))

Pandas 唯一的解决方案,通过 with 过滤boolean indexingSeries.isin通过以下方式反转掩码~

s = data[~data.isin(set(df_row))].drop_duplicates()
s.to_csv("part1left.txt", index=False)

编辑:

如果需要Series从文件创建:

import pandas as pd

temp=u"""12354564
25345754
23545454
11565654
46456456"""
#after testing replace 'pd.compat.StringIO(temp)' to 'filename1.csv'
data = pd.read_csv(pd.compat.StringIO(temp), squeeze=True, header=None, dtype=str)
print (data)
0    12354564
1    25345754
2    23545454
3    11565654
4    46456456
Name: 0, dtype: int64


temp=u"""23545454
11565654
46456456"""
#after testing replace 'pd.compat.StringIO(temp)' to 'filename2.csv'
df_row = pd.read_csv(pd.compat.StringIO(temp), squeeze=True, header=None, dtype=str)
print (df_row)
0    23545454
1    11565654
2    46456456
Name: 0, dtype: int64

推荐阅读