比较pandas中数据帧的标头

时间:2017-08-03 11:22:39

标签: python python-3.x pandas

我正在尝试比较两个pandas数据帧的标头并过滤匹配的列。 df1是我的两个标题的大数据帧,df2是一个字典,我已经保存了df1所需的每个列标题。

所以如果df1是这样的话:

    A         B         C         D
    a         b         c         d
 0.469112 -0.282863 -1.509059 -1.135632
 1.212112 -0.173215  0.119209 -1.044236
-0.861849 -2.104569 -0.494929  1.071804
 0.721555 -0.706771 -1.039575  0.271860
-0.424972  0.567020  0.276232 -1.087401
-0.673690  0.113648 -1.478427  0.524988

和df2是这样的:

   B         D         E

我需要获得输出:

     B          D
 -0.282863  -1.135632
 -0.173215  -1.044236
 -2.104569   1.071804
 -0.706771   0.271860
  0.567020  -1.087401
  0.113648   0.524988

以及不匹配的标题元素列表:

A      C

以及df1缺少的元素:

E

到目前为止,我已经在stackoverflow上尝试了iloc命令和许多不同的建议来比较行。因为我比较标题虽然不可能。

编辑:我试过了

df1.columns.intersection(df2.columns)

但结果是:

MultiIndex(levels=[[], []],
           labels=[[], []])

这是因为有多个标题?

1 个答案:

答案 0 :(得分:8)

对于给定的df1df2

,这里有几种方法
In [1041]: df1.columns
Out[1041]: Index([u'A', u'B', u'C', u'D'], dtype='object')

In [1042]: df2.columns
Out[1042]: Index([u'B', u'D', u'E'], dtype='object')

df1df2

中的列
In [1046]: df1.columns.intersection(df2.columns)
Out[1046]: Index([u'B', u'D'], dtype='object')

df1中的列不在df2

In [1047]: df1.columns.difference(df2.columns)
Out[1047]: Index([u'A', u'C'], dtype='object')

df2中的列不在df1

In [1048]: df2.columns.difference(df1.columns)
Out[1048]: Index([u'E'], dtype='object')