python-3.x - 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'
解决方案
如果您data
的解决方案需要将输出转换为,然后再转换为:df_row
Series
list
Series
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 indexing
和Series.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
推荐阅读
- android - 图像未显示在 ImageView 中(选项卡式活动中 ViewPager 内的 Fragent)-毕加索未替换占位符
- video - 为什么用ffmpeg渲染后文件大小没有减小?
- mongodb - 2020 年使用 ReactiveMongo(用于播放框架应用程序)
- php - Json decode 什么都不返回
- c - c 中的位运算符 23 << (23 >> 2)
- ios - How to pressed a UIButton within a customized TableviewCell?
- python - 为什么我的字典中没有插入这些数据?
- flutter - Hypertrack 正在阻止 Flutter 中的 FCM 通知
- ios - 检测按钮被点击的单元格
- continuous-integration - 在 Artifactory 中使用 build-info 下载工件