如何找到两个Pandas DataFrame之间的集合差异

时间:2017-10-06 04:44:50

标签: python pandas numpy dataframe set

我想检查两个DataFrame列之间的区别。我尝试使用命令:

np.setdiff1d(train.columns, train_1.columns)

导致一个空数组:

array([], dtype=object)

但是,数据框中的列数不同:

len(train.columns), len(train_1.columns) = (51, 56)

这意味着两个DataFrame明显不同。

这里有什么问题?

2 个答案:

答案 0 :(得分:1)

结果是正确的,但setdiff1d依赖于顺序。它只会检查第一个输入数组中第二个数组中没有出现的元素。

如果您不关心哪个数据框具有唯一列,则可以使用setxor1d。它将返回“仅在一个(不是两个)输入数组中的唯一值”,请参阅documentation

import numpy

colsA = ['a', 'b', 'c', 'd']
colsB = ['b','c']

c = numpy.setxor1d(colsA, colsB)

将返回一个包含'a'和'd'的数组。

如果您想使用setdiff1d,则需要双向检查差异:

//columns in train.columns that are not in train_1.columns
c1 = np.setdiff1d(train.columns, train_1.columns)

//columns in train_1.columns that are not in train.columns
c2 = np.setdiff1d(train_1.columns, train.columns)

答案 1 :(得分:1)

使用类似的东西

data_3 = data1[~data1.isin(data2)]

其中data1和data2是列,而data_3 = data_1-data_2