pandas merge 时只保留左表所有行但右表只匹配部分列
技术百科
冷炫風刃
发布时间:2026-01-21
浏览: 次 用pandas.merge()实现左表全保留、右表仅匹配指定列,需设how='left'并提前筛选右表所需列(如right_df[['id','region','target_col']]),再通过on或left_on/right_on精准连接,避免冗余列混入。
用 pandas.merge() 实现“保留左表所有行,右表只参与匹配部分列”,关键在于正确设置 how='left' 和精准指定 on(或 left_on/right_on)参数,同时确保右表中**不参与连接的列不会被意外带入结果**——因为默认情况下,merge 会把右表所有列都加入结果,只是对未匹配行填充 NaN。
明确指定连接键,避免右表冗余列混入
如果你只想用右表的某些列做匹配(比如只用 'id' 和 'region'),但右表还有其他列(如 'sales'、'cost'、'notes')你并不想保留,那就不能直接 merge 后再删列——而应在 merge 前先筛选右表:
- 用
right_df[['id', 'region', 'target_col']]提前截取右表中真正需要参与连接 + 需要保留的列 - 确保
on列在两个子集中都存在且类型一致(比如都是字符串或都转成 category) - 这样 merge 出来的结果里,右表只会出现你显式选中的那几列,干净无干扰
用 left_on/right_on 灵活匹配不同名但语义相同的列
当左右表连接字段名称不一致(如左表叫 'user_id',右表叫 'uid'),又只想用其中一对字段匹配,其他列不参与也不保留,写法示例:
✅ 正确做法(只引入右表指定列):
result = pd.merge(left_df, right_df[['uid', 'status', 'level']], # 只取右表这三列 left_on='user_id', right_on='uid', how='left', suffixes=('', '_right') ) # 自动丢弃右表的 'uid'(因已用于连接),保留 'status' 和 'level'
警惕隐式列冲突与重复列名
如果右表筛选后仍存在与左表同名的非连接列(例如左右都有 'name'),merge 默认会加后缀(如 'name' 和 'name_right')。若你只要左表的 'name',右表的不想留,就别把它放进右表子集里;如果确实需要右表的 'name' 替换左表对应值,可在 merge 后用 fillna() 或 combine_first() 控制逻辑,而不是依赖 merge 自动覆盖。
验证是否真“只匹配部分列”
merge 完成后快速检查两件事:
-
result.columns是否只含你预期的右表列(没有多出无关字段) -
result['status'].isna().sum()是否符合业务预期(即左表哪些行本该无匹配) - 用
result.query('status != status')查看 NaN 行对应的左表 key,确认缺失是否合理
# 都是
# 也不
# 把它
# 都有
# 那就
# 所需
# 可在
# 想用
# 只会
# go
# cos
# 字符串
# pandas
# 应在
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- 如何减少Golang内存碎片化_Golang内存分
- 如何使用Golang编写单元测试_创建Test函数
- Win11如何设置环境变量 Win11添加和修改系
- Win11怎么连接投影仪_Win11多显示器投屏设
- php本地部署支持nodejs吗_php与node
- Win11怎么设置开机问候语_自定义Win11锁屏
- 电脑无法识别U盘怎么办 Windows磁盘管理与驱
- 如何在Golang中处理URL参数_Golang
- Windows10系统更新错误0x80070002
- Win11怎么开启游戏模式_Windows11优化
- php会话怎么开启_session_start函数
- 如何使用Golang开发基础文件下载功能_Gola
- 短链接怎么用php递归还原_多层加密链接的处理法【
- Win11怎么格式化U盘_Win11系统U盘格式化
- Win10怎么查看内存时序参数_Win10CPU-
- Win11怎么设置触控板手势_Windows11三
- PyTorch DDP 多进程训练在 Kaggle
- Linux如何申请SSL免费证书_Linux下Ce
- PowerShell怎么创建复杂的XML结构
- php删除数据怎么加限制_带where条件删除避免
- Win11如何设置鼠标灵敏度_Win11鼠标灵敏度
- Mac电脑如何恢复出厂设置_Mac抹掉数据并重装系
- VSC怎样用终端运行PHP_命令行执行脚本的步骤【
- 如何正确访问 Laravel 模型或对象的属性而非
- Windows蓝屏BAD_POOL_HEADER故
- PHP cURL GET请求:正确设置请求头与身份
- Windows10系统服务优化指南_Win10禁用
- Win11怎么设置默认邮件客户端 Win11修改M
- Python数据抓取合法性_合规说明【指导】
- c++怎么设置线程优先级与cpu亲和性_c++ 多
- Win11触摸板没反应怎么办_开启Win11笔记本
- PythonPandas数据分析教程_数据清洗与处
- Win11怎么设置默认输入法 Win11固定中文输
- Win11怎么设置桌面图标间距_Windows11
- 使用类变量定义字符串常量时如何实现类型安全的 Li
- 如何用正则表达式精确匹配最多含一个换行符的起止片段
- Mac电脑进水了怎么办_MacBook进水后紧急处
- mac怎么安装pip_MAC Python pip
- Bpmn 2.0的XML文件怎么画流程图
- Mac如何将HEIC图片格式转为JPG_Mac批量
- c++怎么编写动态链接库dll_c++ __dec
- Win11怎么关闭通知中心_Windows11系统
- c++的STL算法库find怎么用 在容器中查找指
- MAC如何快速搜索大文件_MAC磁盘空间分析与冗余
- Win11怎么关闭应用权限_Windows11相机
- c# Task.Yield 的作用是什么 它和Ta
- Python迭代器生成器进阶教程_节省内存与懒加载
- 本地php环境打开php文件直接下载_浏览器解析p
- VSC里PHP变量未定义报错怎么解决_错误抑制技巧
- Win11怎么恢复旧版开始菜单_通过软件还原Win


QQ客服