如何用Python Pandas按索引合并两个DataFrame并填充缺失值
解决Pandas不同结构DataFrame按索引合并并填充缺失值的问题
嘿,刚接触Pandas的话,踩pd.concat()的坑太正常了——它只是简单把两个DataFrame堆叠起来,完全没法实现你要的“用DF2填充DF1对应索引缺失值”的需求。咱们直接上正确的解决方案:
最佳方法:使用combine_first()
Pandas专门提供了combine_first()方法来处理这种场景,逻辑完全匹配你的需求:
- 以DF1为基础框架,保留它的所有行、列以及已有值
- 自动按索引和列名对齐DF2的数据
- 用DF2中对应索引-位置的值,填充DF1里的缺失值(NaN)
- 同时保留DF2中DF1没有的行和列(如果有的话)
示例代码
import pandas as pd # 假设你的DF1和DF2已经定义好 Output_DF = DF1.combine_first(DF2)
直观例子帮你理解
假设我们有两个结构不同的DataFrame:
DF1:
| index | 列A | 列B |
|---|---|---|
| 0 | 10 | NaN |
| 1 | NaN | 20 |
DF2:
| index | 列A | 列C |
|---|---|---|
| 0 | NaN | 30 |
| 1 | 40 | 50 |
| 2 | 60 | 70 |
运行DF1.combine_first(DF2)后得到的Output_DF:
| index | 列A | 列B | 列C |
|---|---|---|---|
| 0 | 10 | NaN | 30 |
| 1 | 40 | 20 | 50 |
| 2 | 60 | NaN | 70 |
你看:
- DF1里索引1的列A缺失值,被DF2的40填充了
- DF1有值的地方(索引0的列A、索引1的列B)全部保留
- DF2独有的列C和索引2的行也被完整保留
为什么pd.concat()不行?
pd.concat([DF1, DF2])只是做简单的行拼接,会产生重复索引的行,完全不会处理缺失值的填充——比如上面的例子用concat的话,会得到5行数据(DF1的2行+DF2的3行),完全不是你要的合并填充效果。
内容的提问来源于stack exchange,提问作者SUMIT VISHWAKARMA
相关产品推荐
相关产品推荐

