Pandas合并DataFrame去重无效及行比较报错问题求助
问题根源与解决办法
问题根源
- 重复行识别失败核心原因:你看到的「重复行」实际存在值差异——一行的text列是
NaN,另一行是空字符串""。Pandas的drop_duplicates默认会把NaN和空字符串判定为不同值,因此不会将这两行视为重复项。 - 行比较报错原因:
dfAferConcat.loc[[303]]的索引是[303],dfAfterConcat.loc[[0]]的索引是[0],DataFrame间的比较要求索引完全匹配,所以抛出ValueError。
最优解决办法
第一步:统一空值格式
先把空字符串替换为NaN(或反向替换),让Pandas能识别出真正的重复行:
import numpy as np # 方案1:替换整个DataFrame中的空字符串为NaN dfAfterConcat = dfAfterConcat.replace("", np.nan) # 方案2:仅针对text列处理(如果只有这一列存在该问题) dfAfterConcat['text'] = dfAfterConcat['text'].replace("", np.nan)
第二步:执行去重
现在调用drop_duplicates就能正确识别重复行,加上ignore_index=True可重置索引:
dfAfterConcat = dfAfterConcat.drop_duplicates(ignore_index=True)
补充:正确比较两行的方法
如果需要验证两行是否一致,可修改其中一行的索引后再比较:
# 将303行的索引改为0,再和0行对比 row303 = dfAfterConcat.loc[[303]].rename(index={303: 0}) print(row303 == dfAfterConcat.loc[[0]])
内容的提问来源于stack exchange,提问作者SemperVirens
相关产品推荐
相关产品推荐

