说我有一个pandas.DataFrame x
,x
被提供给函数filter
并返回了y
,从x
中删除了一些列的DataFrame 。该函数是一个黑匣子,列号很大。我如何找到“ x”中已删除的列?
或者,y.columns
是x.columns
的子集,我怎么能找到x
中不在y
中的列?
示例:
x = pd.DataFrame(np.array([[1,2,3],[4,5,6]]))
x.columns = list('abc')
y = x.iloc[:, :2].copy()
>>> x
a b c
0 1 2 3
1 4 5 6
>>> y
a b
0 1 2
1 4 5
我想返回列c
。
我现在的解决方案:
>>> xc = x.columns.values.tolist()
>>> yc = y.columns.values.tolist()
>>> diff = [i for i in xc if i not in yc]
>>> x[diff]
c
0 3
1 6
是否可以在不提取列名的情况下获得结果?
我以为这是某种基本操作,但是我找不到在线简单的答案。
谢谢。
答案 0 :(得分:0)
将sets
或熊猫difference
用作:
x[x.columns.difference(y.columns)]
或者:
x[list(set(x.columns)-set(y.columns))]
这将给出x
数据框中的列值,而不是y
数据框中的列值。
print(x[x.columns.difference(y.columns)])
或:
print(x[list(set(x.columns)-set(y.columns))])
c
0 3
1 6
答案 1 :(得分:0)
使用sets
:
x_col = set(x.columns)
y_col = set(y.columns)
x_col.difference(y_col)
>>{'c'}
x_col.difference(y_col)
将返回仅存在于x_col
中但不存在于y_col
答案 2 :(得分:0)
您可以使用numpy
:
import numpy as np
diff = np.setdiff1d(xc,yc)
OR
但是,使用本机方法总是很好的:
diff = list(xc - yc)