我有两个csv文件,都包含在第1天和第2天发布的推文。我想比较推文的作者以发现新用户。
第 1 天.csv如下所示:
authorID
451223
120346
122355
787456
第 2 天.csv如下所示:
authorID
451223
025660
122355
022000
使用 day1.csv 作为枢轴...我想比较作者 ID。任何新作者(即第 2 天的作者.csv但不在第 1 天.csv(,我都会输出作者的 ID。请问我如何在python 3.XX<</p>
如果您将两个CSV文件都作为可迭代对象加载(f.readlines()
?(,那么您可以简单地使用集合差值返回具有day2元素的新集合.csv这些元素不在day1.csv中:
>>> day1 = ['authorID',451223,120346,122355,787456]
>>> day2 = ['authorID',451223,025660,122355,022000]
>>> set(day2) - set(day1)
set([11184, 9216])
或
>>> set(day2).difference(day1)
set([11184, 9216])
你可以这样做:
import pandas as pd
df1=pd.DataFrame({'authorID':['12','34','56']})
df2=pd.DataFrame({'authorID':['12','56','78','97']})
original_users=set(df1[['authorID']].values.reshape(-1))
for i in df2[['authorID']].values.reshape(-1):
if i not in original_users:
print(i)
那么df1
是
u
0 12
1 34
2 56
df2
是
u
0 12
1 56
2 78
3 97
输出为
78
97
请注意,df1[['authorID']].values.reshape(-1)
使您能够将列转换为可以迭代的列表。对于这个特定示例, df1[['authorID']].values.reshape(-1)
array(['12', '34', '56'], dtype=object)
.将此数组转换为set
是为了提高复杂性。
只是比较两组authorID
之间的差异的另一种方法:
>>> old = {'451223', '120346', '122355', '787456'}
>>> new = {'451223', '025660', '122355', '022000'}
>>> {x for x in new if x not in old}
{'025660', '022000'}
假设day1
和day2
是数据帧...将merge
indicator
参数设置为 True
day1.merge(day2, 'outer', indicator=True).query('_merge != "both"')
authorID _merge
1 120346 left_only
3 787456 left_only
4 25660 right_only
5 22000 right_only