比较两个pandas数据帧中的列并吐出差异

时间:2017-03-21 00:48:23

标签: python csv pandas twitter dataframe

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

day1.csv看起来像这样:

authorID
451223
120346
122355
787456

day2.csv看起来像这样:

authorID
451223
025660
122355
022000

使用day1.csv作为数据库...我想比较作者ID ..任何新作者(即day2.csv中的作者但不是day1.csv中的作者),我输出了作者的ID。请问如何在python 3.XX中执行此操作

4 个答案:

答案 0 :(得分:1)

如果您将两个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])

>>> set(day2).difference(day1)
set([11184, 9216])

答案 1 :(得分:0)

你可以这样做:

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以提高复杂性。

答案 2 :(得分:0)

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

>>> old = {'451223', '120346', '122355', '787456'}
>>> new = {'451223', '025660', '122355', '022000'}
>>> {x for x in new if x not in old}
{'025660', '022000'}

答案 3 :(得分:0)

假设day1day2是数据框...使用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