Pandas合并两个DataFrame使用外连接结果不符合预期如何解决
解决方法
你之前合并出现两列Student、成绩匹配错误,通常是因为调用合并方法时没有显式指定Student作为公共连接键,或是误用了按索引/按位置拼接的方法导致的。
标准实现代码
使用pandas的merge方法即可实现需求:
import pandas as pd # 外连接合并两个表 merged_df = pd.merge(df, df1, on="Student", how="outer")
参数说明:
on="Student":指定两个表共有的Student列作为唯一匹配依据,合并后只会保留1列Studenthow="outer":取两个表学生姓名的并集,不存在的成绩会自动填充为NaN
特殊情况处理:两表学生列名不一致
如果两个表的学生字段名不相同(比如df中是Student,df1中是Name),使用以下写法:
merged_df = pd.merge(df, df1, left_on="Student", right_on="Name", how="outer") # 删除多余的学生列,只保留1列即可 merged_df = merged_df.drop("Name", axis=1)
避坑提醒
- 不要直接用
pd.concat([df, df1], axis=1)按列拼接,该方法不会根据学生姓名匹配行,只会按两个表的行顺序对齐,排序不一致时必然出现匹配错误 - 合并前可先检查
Student列是否存在多余空格、大小写不一致的问题,避免相同学生因为名称格式不同被判定为不同记录
内容的提问来源于stack exchange,提问作者user3011030
相关产品推荐
相关产品推荐

