如何合并两个大型DataFrame并为缺失值赋值NaN?
解决方案
针对你处理大型DataFrame合并的需求,核心是要以df1为基准匹配df2的A列,同时高效处理千万级数据量,具体解决步骤如下:
1. 修正合并方式
你之前用how='right'是错误的——右连接会以df2为基准保留其所有行,而你需要的是保留df1的全部行,缺失匹配值时填充NaN,因此应该用左连接(how='left')。
2. 处理重复值(可选但关键)
如果df2的A列存在重复值,直接合并会产生笛卡尔积,导致结果行数暴增且数据冗余。先对df2的A列去重:
# 保留df2中A列的唯一值,避免合并后行数膨胀 df2_clean = df2.drop_duplicates(subset='A')
3. 高效合并
利用pandas优化后的矢量化合并操作(远快于循环遍历),执行左连接:
# 以df1为基准,匹配df2的D列,无匹配则填充NaN merged_df = df1.merge(df2_clean, how='left', on='A', sort=False)
- 设置
sort=False可以跳过排序步骤,大幅提升千万级数据的合并速度(如果不需要最终结果按A列排序的话)。
验证示例
用你给出的测试数据执行上述代码,会得到完全符合预期的结果:
A B C D x 1 2 10.0 y 5 6 NaN z 4 4 20.0
内容的提问来源于stack exchange,提问作者Ivette Gonzalez
相关产品推荐
相关产品推荐

