You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pandas比较DataFrame时,如何不转大小写忽略大小写差异?

忽略大小写比较两个Pandas DataFrame(不修改原数据)

如果不想修改原DataFrame的大小写,直接做忽略大小写的比较,可以通过生成临时的小写映射版本来对比,核心思路是不对原数据做持久化修改,只在比较环节统一大小写:

1. 全元素忽略大小写比较

针对字符串类型的列,我们可以用applymap配合str.lower()生成临时的小写副本,再进行比较。对于非字符串类型的列(比如数字、日期),直接保留原值即可,避免报错:

# 定义一个函数,对字符串转小写,非字符串返回原值
def to_lower(x):
    return x.lower() if isinstance(x, str) else x

# 生成临时的小写版本DataFrame,原df1、df2完全不变
df1_lower = df1.applymap(to_lower)
df2_lower = df2.applymap(to_lower)

# 现在进行比较,结果就是忽略大小写的差异
comparison_result = df1_lower.eq(df2_lower)

2. 包含索引的忽略大小写比较

因为你读取时指定了index_col,如果索引是字符串类型,也需要忽略大小写对齐。可以先处理索引和列名的大小写,再做元素比较:

# 处理索引:把两个df的索引都转小写,重新对齐
df1_index_lower = df1.set_index(df1.index.str.lower())
df2_index_lower = df2.set_index(df2.index.str.lower())

# 处理列名:统一转小写避免列名大小写差异影响比较
df1_index_lower.columns = df1_index_lower.columns.str.lower()
df2_index_lower.columns = df2_index_lower.columns.str.lower()

# 生成临时小写元素版本后比较
df1_compare = df1_index_lower.applymap(to_lower)
df2_compare = df2_index_lower.applymap(to_lower)

# 得到忽略索引、列名、元素大小写的比较结果
full_comparison = df1_compare.eq(df2_compare)

3. 快速定位差异位置

如果需要直接找出两个df中忽略大小写后不同的单元格,可以用:

# 生成差异掩码,找出所有不一致的位置
diff_mask = ~df1_lower.eq(df2_lower)
# 提取并展示差异单元格
diff_cells = df1[diff_mask].stack().dropna()

这种方式的好处是原DataFrame的结构、大小写完全保留,所有转换只在比较过程中临时生效,不会修改原始数据。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 16:52:04