使用DataFrame.apply()触发ValueError: cannot reindex from a duplicate axis是什么意思?
解决ValueError: cannot reindex from a duplicate axis错误
嘿,我来帮你拆解这个问题!
错误含义解释
这个ValueError的核心意思是:你的DataFrame存在重复的行索引,当你尝试新增列(或执行需要重新对齐索引的操作)时,Pandas无法明确将新生成的值与原数据的行一一对应,因此抛出错误。简单说就是索引重复导致Pandas“懵了”,不知道该怎么把新数据匹配到原行上。
你的问题排查
看你提供的代码,process_name函数的逻辑本身没有问题,问题大概率出在你的DataFrame索引上。你可以先执行下面的代码验证:
print(df.index.duplicated().any())
如果输出True,就坐实了是重复索引的问题。
解决方案
最直接且通用的解决方法是重置索引,生成无重复的连续整数索引,之后再执行你的列新增操作:
# 先检查并重置索引(drop=True会丢掉原来的旧索引) if df.index.duplicated().any(): df = df.reset_index(drop=True) # 你的姓名处理函数 def process_name(name): if 'Mr' in name: return 'Mr' elif ('Mrs' in name) or ('Miss' in name): return 'Mrs' elif 'Master' in name: return 'Ms' else: return 'Other' # 新增Name_Title列 df['Name_Title'] = df['Name'].apply(process_name)
如果你的重复索引是有业务意义的(比如需要保留原索引),可以尝试将处理后的结果转为Series并指定索引对齐,但这种情况相对复杂,除非必要,还是推荐上面的重置索引方案。
内容的提问来源于stack exchange,提问作者Jaskaran Singh Puri
相关产品推荐
相关产品推荐

