当前位置:首页>python>Python:Pandas 多表合并 concat/merge 区分场景实战

Python:Pandas 多表合并 concat/merge 区分场景实战

  • 2026-10-11 06:00:26
Python:Pandas 多表合并 concat/merge 区分场景实战
多文件、多分片数据表整合分为「纵向堆叠合并」与「关键字段横向关联合并」,混用concat、merge会出现重复匹配、维度错乱,本篇完整区分两套API适用场景、避坑点与性能优化写法。
场景1:1月、2月两份结构完全一致的订单分片文件,纵向合并为完整季度订单;场景2:合并用户基础信息与订单数据,按用户uid横向拼接完整业务宽表。核心知识点:concat纵向拼接参数、merge四种连接匹配方式、重复主键处理、大表合并内存优化。

① 字段含义说明

订单分片表(df1、df2通用字段)

用户基础表user_df字段

② 生成两份分片订单数据、用户数据

import pandas as pdimport numpy as np# 1月订单分片df1 = pd.DataFrame({    "order_id": range(1,41),    "uid": np.random.randint(1001,1020,40),    "amount": np.random.uniform(100,3000,40).round(2),    "month": ["01月"]*40})# 2月订单分片df2 = pd.DataFrame({    "order_id": range(41,81),    "uid": np.random.randint(1001,1020,40),    "amount": np.random.uniform(100,3000,40).round(2),    "month": ["02月"]*40})# 用户基础信息表user_df = pd.DataFrame({    "uid": list(range(1001,1021)),    "username": [f"用户{x}" for x in range(1001,1021)],    "channel": np.random.choice(["APP","小程序","官网"],20)})df1.to_excel("order_01.xlsx", index=False)df2.to_excel("order_02.xlsx", index=False)user_df.to_excel("user_info.xlsx", index=False)print("多表合并测试分片数据生成完成")

③ 核心合并代码

import pandas as pddf1 = pd.read_excel("order_01.xlsx")df2 = pd.read_excel("order_02.xlsx")user_df = pd.read_excel("user_info.xlsx")# 场景1:concat纵向拼接同结构分片数据order_all = pd.concat([df1, df2], ignore_index=True)print("==== 1、2月订单纵向合并总行数:", len(order_all))# 场景2:merge左关联,保留全部订单,匹配用户信息order_user_wide = pd.merge(    left=order_all,    right=user_df,    left_on="uid",    right_on="uid",    how="left" # 左连接:保留所有订单,无匹配用户填充空值)print("\n==== 订单+用户宽表前8行 ====")print(order_user_wide[["order_id","uid","amount","username","channel"]].head(8))

结果展示

总结

  1. concat
    仅用于字段完全一致的数据纵向堆叠,ignore_index=True重置行索引避免重复;
  2. merge
    用于按关键字段横向关联多维度表,业务场景优先使用left左连接保留主表全部数据;
  3. 百万级大表合并前可提前筛选必要字段,减少内存占用,避免合并卡顿。

最新文章

随机文章