繁体   English   中英

如何通过比较 pandas 中的两个数据帧来呈现不同的列/行?

[英]how to render distinct columns/rows by comparing two dataframes in pandas?

我有两个数据框,但它们有更多的公共列和几个只出现在 dataframe 之一中的不同列。我想打印出那些不同的列和公共列,以便更好地了解另一个 dataframe 中更改了哪些列。我得到了一些有趣的在 SO 上发帖,但不知道为什么会出错。 我有两个具有以下形状的数据框:

df19.shape
  (39831, 1952)

df20.shape
(39821, 1962)

这是虚拟数据:

df1 = pd.DataFrame([[1, 2], [1, 3], [4, 6],[11,13],[10,19],[21,23]], columns=['A', 'B'])
df2 = pd.DataFrame([[3, 4,0,7], [1, 3,9,2], [4, 6,3,8],[8,5,1,6]], columns=['A', 'B','C','D'])

当前尝试

我遇到了 SO 并尝试了以下操作:

res=pd.concat([df19, df20]).loc[df19.index.symmetric_difference(df20.index)]
res.shape
(10, 1984)

这给了我不同的行但没有不同的列。我也试过这个但给了我错误:

df19.compare(df20, keep_equal=True, keep_shape=True)

我应该如何通过比较 pandas 中的两个数据帧来呈现不同的行和列? 有谁知道在 python 中轻松做到这一点? 任何快速的想法? 谢谢

客观的

我只是想呈现不同的行或列,以按列名或它具有的不同行来比较两个 dataframe。 比如df2相比df1,新增了哪些列; 类似地,哪些行被添加到 df2 等等。 任何的想法?

我建议通过按列名过滤来获取列。

common = [i for i in list(df1) if i in list(df2)]
temp = df2[common]

distinct = [i for i in list(df2) if i not in list(df1)]
temp = df2[distinct]

感谢@Shaido,这个对我有用:

import pandas as pd

df1=pd.read_csv(data1)
df2=pd.read_csv(data2)

df1_cols = df1.columns
df2_cols = df2.columns

common_cols = df1_cols.intersection(df2_cols)
df2_not_df1 = df2_cols.difference(df1_cols)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM