在Matplotlib场景下如何基于编号或名称合并两个Excel文件数据?
嘿,我来帮你搞定这个Pandas合并的问题!
你遇到的问题其实是因为pd.merge()默认用的是内连接(inner join),这种连接方式只会保留两个表中都存在匹配键的行——也就是第二个文件里那4个编号的数据,自然看不到第一个文件里全部1-50条记录啦。
要实现你想要的「保留第一个文件所有数据,匹配第二个文件对应条目」的效果,你需要用左连接(left join),具体操作步骤如下:
1. 先读取两个Excel文件
首先用pd.read_excel()把两个文件读成DataFrame:
import pandas as pd # 替换成你的文件实际路径 df_full = pd.read_excel("第一个文件.xlsx") # 包含No.1-50的全量数据 df_partial = pd.read_excel("第二个文件.xlsx") # 仅包含No.5、9、10、20的数据
2. 按编号(No.)左连接合并
指定how="left"来保留左表(也就是全量数据的df_full)的所有行,同时匹配右表(df_partial)的对应数据:
# 按No.列进行左连接 merged_df = pd.merge(df_full, df_partial, on="No.", how="left")
这样合并后,df_full里的50条记录都会保留:
- 编号5、9、10、20的行会自动填充第二个文件里的
Average、highestvalue、lowerValue数据; - 其他编号的这些列会显示为
NaN(表示没有匹配到对应数据),完全符合你的需求。
3. (可选)按名称(Name)合并
如果你的场景是想用Name作为匹配键(比如第一个文件的Name和第二个文件的No.存在对应关系,比如Name是"Item_5"对应No.5),可以先处理Name列提取匹配值,再用left_on和right_on指定匹配列:
# 从df_full的Name列提取数字(比如从"Item_5"中取出5) df_full["matched_no"] = df_full["Name"].str.extract(r'(\d+)').astype(int) # 用提取出的编号和df_partial的No.合并 merged_df = pd.merge(df_full, df_partial, left_on="matched_no", right_on="No.", how="left")
4. 保存合并结果
最后可以把合并好的数据导出到新的Excel文件:
merged_df.to_excel("合并后的数据.xlsx", index=False)
内容的提问来源于stack exchange,提问作者Rubicelia Patlán
相关产品推荐
相关产品推荐

