抖音十大传媒公司名称,网站优化效果怎么样,百家港 seo服务,免费查公司信息#x1f517; 搞懂 pandas 中的 concat、merge、join#xff1a;三者到底有什么区别#xff1f;你是不是也经常困惑#xff1a;什么时候用 pd.concat()#xff1f;什么时候该用 df.merge()#xff1f;df.join() 又是什么#xff1f;跟 merge 有啥不同#xff1f;别急&a… 搞懂 pandas 中的concat、merge、join三者到底有什么区别你是不是也经常困惑什么时候用pd.concat()什么时候该用df.merge()df.join()又是什么跟 merge 有啥不同别急今天我们就用最直白的语言 可运行的代码一次性讲清楚这三个“拼表”操作的区别和使用场景❝✅ 所有示例数据均由代码生成无需任何外部文件复制即用 准备工作导入库 构造示例数据import pandas as pd # 表1用户基本信息 users pd.DataFrame({ user_id: [1, 2, 3, 4], name: [Alice, Bob, Charlie, Diana], city: [北京, 上海, 广州, 深圳] }) # 表2用户订单信息 orders pd.DataFrame({ order_id: [101, 102, 103, 104], user_id: [1, 2, 3, 5], # 注意user_id5 在 users 中不存在 amount: [200, 150, 300, 99] }) # 表3用户登录日志索引为 user_id logins pd.DataFrame({ last_login: [2026-02-10, 2026-02-12, 2026-02-13, 2026-02-14] }, index[1, 2, 3, 4]) # 索引是 user_id现在我们有三张表users用户主表含 user_idorders订单表通过 user_id 关联logins登录日志以 user_id 为索引接下来就看它们如何“拼”在一起1️⃣pd.concat()上下 or 左右“堆叠”——结构相同直接拼接❝ 适用场景合并多个结构相似的 DataFrame比如多个月份的销售表、多个实验结果示例纵向拼接axis0默认extra_users pd.DataFrame({ user_id: [5, 6], name: [Eva, Frank], city: [杭州, 成都] }) all_users pd.concat([users, extra_users], ignore_indexTrue) print(all_users)✅ 输出6 行用户数据“堆”在一起。示例横向拼接axis1# 把 users 和 logins 按索引横向拼需对齐索引 result pd.concat([users.set_index(user_id), logins], axis1) print(result)⚠️ 注意concat不基于列内容匹配只按索引或位置对齐❝✅核心特点像“粘贴”一样堆叠数据不涉及“关联字段”匹配适合同构数据合并2️⃣df.merge()基于列值的“数据库式连接”——最常用❝ 适用场景两张表通过某个公共字段如 ID关联类似 SQL 的 JOIN示例内连接inner joinmerged users.merge(orders, onuser_id, howinner) print(merged)✅ 输出只保留user_id在两张表中都存在的记录user_id1,2,3支持多种连接方式howleft保留左表全部users 全部orders 缺失补 NaNhowright保留右表全部howouter全保留缺失补 NaN还支持不同名列的连接# 如果 users 用 idorders 用 user_id users2 users.rename(columns{user_id: id}) result users2.merge(orders, left_onid, right_onuser_id)❝✅核心特点基于列的值进行匹配功能最强大、最灵活日常分析 80% 场景用它3️⃣df.join()基于索引的快速连接❝ 适用场景一张表的索引 另一张表的索引或某列示例用users的user_id作为索引去 joinloginsusers_indexed users.set_index(user_id) joined users_indexed.join(logins) # 默认 left join print(joined)✅ 输出users 的每一行自动匹配 logins 中对应索引的登录时间。也可以指定右表用哪一列做索引# 如果 logins 不是以 user_id 为索引而是普通列 logins2 pd.DataFrame({ user_id: [1, 2, 3, 4], last_login: [2026-02-10, 2026-02-12, 2026-02-13, 2026-02-14] }) # 需先设索引 joined2 users_indexed.join(logins2.set_index(user_id))❝✅核心特点默认按索引对齐本质是merge的快捷方式join底层调用merge适合“主表索引 附属信息表”的场景 三者对比速查表方法对齐依据类似 SQL典型用途是否需要公共列pd.concat()索引 / 位置UNION ALL合并多份同结构数据❌ 不需要df.merge()列的值JOIN通过 ID/键关联两张表✅ 需要df.join()索引或指定列JOIN主表索引为ID 附属信息表⚠️ 通常需设索引 使用建议想把多个月的报表合并成一年 → 用concat想把用户表和订单表关联起来 → 用merge你的主表已经用ID设为索引想快速加一列信息 → 用join❝ 记住一句话“concat 是堆叠merge 是匹配join 是索引对齐。” 结语掌握concat、merge、join的区别是迈向高效数据处理的关键一步下次再遇到“怎么把两张表合起来”的问题先问自己 我是要堆数据还是按字段匹配还是按索引补充信息❤️ 觉得有用点赞 在看 转发让更多人告别“拼表混乱”