Pandas如何不区分大小写删除DataFrame中的重复行
Pandas 不区分大小写删除单列重复记录实现方案
你可以通过「统一字符串大小写作为去重判断键,保留原始字符串值」的思路实现需求,不需要修改原列的实际内容。
方法1:drop_duplicates 实现(最简洁易读)
首先构造测试数据:
import pandas as pd df = pd.DataFrame({'Col': ['Appliance Identification', 'Natural Language','Social networks', 'natural language', 'Personal robot', 'Social Networks', 'Natural language']})
核心操作是新增一个临时列,把原列值全部转为小写(或大写),按这个临时列去重后删掉临时列即可,你可以通过keep参数控制保留重复组中的哪条记录:
- 保留每个重复组第一次出现的原始值:
df["temp_lower"] = df["Col"].str.lower() df = df.drop_duplicates(subset="temp_lower", keep="first").drop(columns="temp_lower").reset_index(drop=True)
运行结果:
Col 0 Appliance Identification 1 Natural Language 2 Social networks 3 Personal robot
- 保留每个重复组最后一次出现的原始值:
df["temp_lower"] = df["Col"].str.lower() df = df.drop_duplicates(subset="temp_lower", keep="last").drop(columns="temp_lower").reset_index(drop=True)
运行结果:
Col 0 Appliance Identification 1 Personal robot 2 Social Networks 3 Natural language
你给出的示例期望中
Social networks为首次出现的写法、Natural language为末次出现的写法,属于自定义保留规则,只需要在去重后按需求调整对应值即可,核心去重逻辑不变。
方法2:groupby 实现(适合自定义规则场景)
如果你需要更灵活的保留规则(比如取重复组中长度最短/最长的字符串),可以用分组聚合实现,比如保留首次出现记录的写法:
df = df.groupby(df["Col"].str.lower(), as_index=False).first().reset_index(drop=True)
如果要保留末次出现的记录,把.first()替换为.last()即可。
注意事项
- 如果列中存在非字符串类型的值,先调用
.astype(str)做类型转换,避免str.lower()报错 - 如果不需要重置连续行号,可以去掉代码末尾的
.reset_index(drop=True),会保留原始数据的行索引
内容的提问来源于stack exchange,提问作者Alex AM
相关产品推荐
相关产品推荐

