首页 > 解决方案 > 如何使用列索引比较两个数据框?

问题描述

我正在使用 INSERT OVERWRITE LOCAL DIRECTORY 命令将 hdfs 查询输出导出到 csv 文件中。由于这会导出没有标题的数据。我从 Oracle 输出中获得了另一个带有文件头的数据帧,我需要将其与 hdfs 输出进​​行比较。

df1 = pd.read_csv('/home/User/hdfs_result.csv', header = None)
print(df1)

      0  1                    2
0  XPRN  A  2019-12-16 00:00:00
1  XPRW  I  2019-12-16 00:00:00
2  XPS2  I  2003-09-30 00:00:00


df = pd.read_sql(sqlquery, sqlconn)


  UNIT  STATUS Date
0  XPRN  A     2019-12-16 00:00:00
1  XPRW  A     2019-12-16 00:00:00
2  XPS2  I     2003-09-30 00:00:00

由于 df1 没有标题,我不能使用 Merge 或 Join 来比较数据。虽然我可以做 df-df1.

请建议我如何比较和打印差异?

标签: pythonpandas

解决方案


您可以传递底层 numpy 数组进行比较:

df2.where(df2==df1.values)

输出(差异被屏蔽为NaN

   UNIT STATUS                 Date
0  XPRN      A  2019-12-16 00:00:00
1  XPRW    NaN  2019-12-16 00:00:00
2  XPS2      I  2003-09-30 00:00:00

对于不匹配的行:

df2[(df2!=df1.values).any(1)]

推荐阅读