使用Pandas合并不同维度的SuperStoreUS Excel多工作表
解决SuperStoreUS多工作表合并问题
方法选择说明
首先明确三种方法的适用场景,你需要的是按指定字段关联不同结构的表,所以pd.merge是最优选择:
concat:仅适合结构高度相似的表(列名/索引一致)做行/列拼接,不适合你的跨表关联需求。join:默认按索引关联表,灵活性不如merge(后者可直接指定关联列)。merge:专为不同表通过指定键(如Region、OrderID)关联设计,完全匹配你的需求。
为什么how='right'会丢数据
right join以右表为基准保留行,如果你的右表是Users或Returns,会只保留右表存在的行,丢弃左表(Orders)中无匹配的行。要完整保留Orders的所有数据,必须用how='left'(以Orders为基准)。
完整合并代码
import pandas as pd # 读取三个工作表 orders_df = pd.read_excel('SuperStoreUS.xlsx', sheet_name='Orders') returns_df = pd.read_excel('SuperStoreUS.xlsx', sheet_name='Returns') users_df = pd.read_excel('SuperStoreUS.xlsx', sheet_name='Users') # 1. 关联Orders与Users:保留所有订单,匹配对应区域的经理信息 orders_with_manager = pd.merge(orders_df, users_df, on='Region', how='left') # 2. 关联退货数据:保留所有订单,匹配对应订单的退货记录(无退货则字段为NaN) final_merged_df = pd.merge(orders_with_manager, returns_df, on='OrderID', how='left') # 验证数据完整性:合并后行数应与原Orders一致 print(f"原Orders行数:{len(orders_df)},合并后行数:{len(final_merged_df)}")
代码说明
- 第一步
left join保证所有订单数据不丢失,Users中的经理信息会自动匹配到对应Region的订单行;若Orders中存在Users未覆盖的Region(按你的描述应该不会),经理字段会填充为NaN,但订单数据仍保留。 - 第二步
left join将退货信息关联进来,有退货记录的行会填充退货字段,无退货的行对应字段为NaN,确保订单数据完整。
内容的提问来源于stack exchange,提问作者Aleksandra Milicevic
相关产品推荐
相关产品推荐

