【问题标题】:Compare headers of dataframes in pandas比较 pandas 中数据帧的标头
【发布时间】:2017-08-03 11:22:39
【问题描述】:

我正在尝试比较两个熊猫数据帧的标题并过滤匹配的列。 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=[[], []])

这是因为多个标题吗?

【问题讨论】:

  • 请提供您编写的最接近您想要做的代码。
  • 请提供:df1.head().to_dict()。在我眼里看起来很奇怪。

标签: python python-3.x pandas


【解决方案1】:

这里有几个方法,给定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')

【讨论】:

  • 交集不起作用,我得到一个空结果,请参阅上面的编辑。这是因为多个标题吗?
  • 标头错误,现在我已修复它并且您的解决方案有效。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多