Pandas1:1关联两个DataFrame时返回2000行而非1000行如何解决?
问题解决方案
问题根因
你当前merge得到2000行的核心原因是两个DataFrame的key_column实际无法匹配:虽然你确认数据是1:1对应,但大概率是key_column存在数据类型不一致、首尾空格/不可见字符的问题,导致匹配时两个表的key没有交集,outer join后就会生成两张表各行独立的结果。
解决步骤
第一步:先验证key匹配情况
运行以下代码确认两个表的key交集数量,如果输出不是1000,即可确认是key匹配异常:
common_keys = set(df_1['key_column']) & set(df_2['key_column']) print(len(common_keys))
第二步:统一清洗key列
对两个表的key列做统一的类型转换和空格清洗,消除匹配障碍:
# 统一转为字符串并去除首尾空格、不可见字符 df_1['key_column'] = df_1['key_column'].astype(str).str.strip() df_2['key_column'] = df_2['key_column'].astype(str).str.strip()
第三步:重新执行合并
清洗后执行inner join即可得到预期的1000行35列结果:
df_3 = pd.merge(df_1, df_2, on="key_column", how='inner') # 验证结果 print(df_3.shape) # 预期输出 (1000, 35)
备选方案
如果你可以确认两个表的行顺序完全一一对应,可以直接按行拼接后删除重复的key列,不需要依赖key匹配:
df_3 = pd.concat([df_1, df_2.drop(columns=['key_column'])], axis=1)
内容的提问来源于stack exchange,提问作者elle_elle_cee
相关产品推荐
相关产品推荐

