Pandas技术问询:列结构不同的多个DataFrame求和合并方法
嘿,我来帮你搞定这个不同列结构DataFrame的合并问题!根据咱们日常处理数据的常见场景,我整理了几种实用的方案,你可以按需挑选:
方案1:按行合并(保留所有列,缺失值补NaN)
如果你只是想把两个DataFrame的行从头到尾拼在一起,不管列有没有重叠,这个方案最适合。用pandas的concat()方法就能搞定:
import pandas as pd # 假设你的两个目标DataFrame是df_a和df_b df_ab = pd.concat([df_a, df_b], axis=0, ignore_index=True)
axis=0:指定按行方向合并ignore_index=True:重置合并后新DataFrame的索引,避免出现重复索引的问题- 效果:某个列只在其中一个DataFrame存在时,另一个DataFrame对应的位置会自动填充NaN,最终得到包含所有列的A+B。
方案2:按共同键合并(类似数据库JOIN)
如果两个DataFrame有共同的标识列(比如用户ID、订单号),想把对应行的信息匹配合并,就用merge()方法,这也是最常用的关联合并方式:
# 基础操作:按共同列'id'做内连接(只保留两边都存在的键对应的行) df_ab = pd.merge(df_a, df_b, on='id') # 要是想保留所有行,哪怕其中一个DataFrame没有对应键,就用外连接 df_ab = pd.merge(df_a, df_b, on='id', how='outer') # 如果两个DataFrame的键列名不一样(比如df_a是'user_id',df_b是'id') df_ab = pd.merge(df_a, df_b, left_on='user_id', right_on='id')
how参数可选值:'inner':默认,只保留两边键都存在的行'left':保留左边df_a的所有行,右边没有对应键的位置补NaN'right':保留右边df_b的所有行,左边没有对应键的位置补NaN'outer':保留两边所有行,缺失的位置补NaN
- 小技巧:如果有重复列名,用
suffixes参数加后缀区分,比如pd.merge(df_a, df_b, on='id', suffixes=('_from_a', '_from_b'))
方案3:按列合并(横向拼接,对齐索引)
如果想把两个DataFrame的列横向拼在一起,按行索引对齐,同样用concat()但指定axis=1:
df_ab = pd.concat([df_a, df_b], axis=1)
- 注意:这个方案要求两个DataFrame的行索引是对应的,不然会出现大量NaN;如果只想保留索引重叠的行,可以加
join='inner'参数,比如pd.concat([df_a, df_b], axis=1, join='inner')
额外提醒
合并前可以先打印df_a.columns和df_b.columns,明确列的差异,这样能更精准地选择合并方式哦!
内容的提问来源于stack exchange,提问作者SFD
相关产品推荐
相关产品推荐

