[英]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.