Python 比较两个数据框中的列,找出差异

Python 比较两个数据框中的列,找出差异,python,csv,pandas,twitter,dataframe,Python,Csv,Pandas,Twitter,Dataframe,我有两个csv文件,都包含在第1天和第2天发布的推文。我想比较推特的作者,以发现新用户 day1.csv如下所示: authorID 451223 120346 122355 787456 authorID 451223 025660 122355 022000 day2.csv如下所示: authorID 451223 120346 122355 787456 authorID 451223 025660 122355 022000 使用day1.csv作为轴心。。。我想比较一下作者I

我有两个csv文件,都包含在第1天和第2天发布的推文。我想比较推特的作者,以发现新用户

day1.csv如下所示:

authorID
451223
120346
122355
787456
authorID
451223
025660
122355
022000
day2.csv如下所示:

authorID
451223
120346
122355
787456
authorID
451223
025660
122355
022000

使用day1.csv作为轴心。。。我想比较一下作者ID。。任何新作者(即day2.csv中的作者,但不是day1.csv中的作者),我都会输出作者的ID。请注意,我如何在python 3.XX中执行此操作?您可以这样做:

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
    u
0   12
1   56
2   78
3   97
df2

    u
0   12
1   34
2   56
    u
0   12
1   56
2   78
3   97
输出是

78
97
请注意,
df1[['authorID']].values.reformate(-1)
使您能够将列转换为可以迭代的列表。就这个例子来说,,
df1[['authorID'].values.reformate(-1)
数组(['12','34','56',dtype=object)
。将此数组转换为
集合
是为了提高复杂性。

如果将两个CSV文件都作为iterables(
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])


这是比较两组
authorID
s之间差异的另一种方法:

>>> 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
,将
指示符
参数设置为
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