You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Pandas多列比较报错:ValueError: Can only compare identically-labeled DataFrame objects

解决Pandas比较不同列名DataFrame时的ValueError问题

这个报错的核心原因很明确:你用来比较的两个子DataFrame列名不匹配,Pandas要求只有列标签完全一致的DataFrame才能直接用!=做逐元素比较,它没办法自动对应correct_Newcorrect_Old这类不同名称的列。

下面给你两种实用的解决方法:

方法1:对齐列名后再比较

把旧列的名字改成和新列一致,让Pandas能明确列的对应关系:

import pandas as pd

# 提取新列数据
df_new = Df[ListNew]
# 提取旧列数据并将列名重命名为新列的名字
df_old = Df[ListOld].rename(columns=dict(zip(ListOld, ListNew)))

# 现在可以正常比较差异
df_merge_files = df_new != df_old

# 保存结果
df_merge_files.to_csv("comparison_report.csv", sep=';', index=False)

方法2:直接比较底层数值(忽略列名)

如果你不想修改列名,可以直接访问DataFrame的values属性(返回numpy数组),按位置对应比较,最后再转成DataFrame:

import pandas as pd

# 按位置比较两个列组的底层数据
diff_values = Df[ListNew].values != Df[ListOld].values
# 将结果转为DataFrame,用新列名作为表头
df_merge_files = pd.DataFrame(diff_values, columns=ListNew)

# 保存结果
df_merge_files.to_csv("comparison_report.csv", sep=';', index=False)

两种方法都能解决问题,第一种更直观,能明确看到是哪一组列的差异;第二种更简洁,适合你确定新旧列顺序完全对应的场景。

内容的提问来源于stack exchange,提问作者SriShan

火山引擎 最新活动