Python 如何使用Pandas通过索引获取两个csv之间的差异

Python 如何使用Pandas通过索引获取两个csv之间的差异,python,pandas,Python,Pandas,需要获得2个csv文件、消除重复项和Nan字段之间的差异。 我正在尝试这个,但它将它们相加而不是相减 df1 = pd.concat([df,cite_id]).drop_duplicates(keep=False)[['id','website']] df是主数据帧 cite\u id是必须减去的数据帧。您可以将两个数据帧连接为一个,然后可以删除所有重复 df1 ID B C D 0 A0 B0 C0 D0 1 A1 B1 C1 D1 2 A

需要获得2个csv文件、消除重复项和Nan字段之间的差异。

我正在尝试这个,但它将它们相加而不是相减

df1 = pd.concat([df,cite_id]).drop_duplicates(keep=False)[['id','website']]
df
是主数据帧
cite\u id
是必须减去的数据帧。

您可以将两个数据帧连接为一个,然后可以删除所有重复

df1 

    ID  B   C   D
0   A0  B0  C0  D0
1   A1  B1  C1  D1
2   A2  B2  C2  D2
3   A3  B3  C3  D3

cite_id
    ID  B   C   D
4   A2  B4  C4  D4
5   A3  B5  C5  D5
6   A6  B6  C6  D6
7   A7  B7  C7  D7

pd.concat([df1,cite_id]).drop_duplicates(subset=['ID'], keep=False)
输出:


您可以将两个数据帧连接为一个,然后可以删除所有重复

df1 

    ID  B   C   D
0   A0  B0  C0  D0
1   A1  B1  C1  D1
2   A2  B2  C2  D2
3   A3  B3  C3  D3

cite_id
    ID  B   C   D
4   A2  B4  C4  D4
5   A3  B5  C5  D5
6   A6  B6  C6  D6
7   A7  B7  C7  D7

pd.concat([df1,cite_id]).drop_duplicates(subset=['ID'], keep=False)
输出:


您可以使用“isin”高效地执行此操作

df.dropna().drop_duplicates()
cite_id.dropna().drop_duplicates()
df[~df.id.isin(cite_id.id.values)]
或者您可以合并它们,只保留具有NaN的行

df[pd.merge(cite_id, df, how='outer').isnull().any(axis=1)]

您可以使用“isin”高效地执行此操作

df.dropna().drop_duplicates()
cite_id.dropna().drop_duplicates()
df[~df.id.isin(cite_id.id.values)]
或者您可以合并它们,只保留具有NaN的行

df[pd.merge(cite_id, df, how='outer').isnull().any(axis=1)]

请以文本形式提供有问题的数据帧最小信息请以文本形式提供有问题的数据帧最小信息它将来自df的所有可用数据合并到它拥有的9000个RAW的引用id中。我需要的是得到新的数据帧,这两个数据帧之间存在差异。你能告诉我,你想要什么差异,你想排除已经是df一部分的ID吗,这是@BillyJhon吗?我想从引用id中列出的df中排除id。@BillyJhon我刚刚编辑了代码,以满足您排除引用id中列出的id的要求。它将来自df的所有可用数据合并到引用id中,以获得9000个RAW。我需要的是得到新的数据帧,这两个数据帧之间存在差异。你能告诉我,你想要什么差异,你想排除已经是df一部分的ID吗,这是@BillyJhon吗?我想从引用id中列出的df中排除id。@BillyJhon我刚刚编辑了代码,以满足您排除引用id中列出的id的要求。请解释这里发生了什么,以及df1和df2与id或id和url df有什么关系?df1是读取第一个csv后的数据帧,df2是第二个csv的数据框。请解释这里发生了什么,df1和df2与id或id和url DF有什么关系?df1是阅读第一个csv后的数据框,df2是第二个csv的数据框。我想在这里注意,这个答案是在我的答案之后发布的,没有什么不同。不知道你为什么选这个@BillyI想在这里指出,这个答案是在我的答案之后发布的,没有什么不同。不知道你为什么选这个@比利