基于Harvest date合并两个DataFrame未达预期,求正确实现方法
解决Pandas DataFrame按日期匹配合并并保留左表所有行的问题
你需要的是左连接(left join),而非外连接(outer join)。外连接会保留两个表的所有行,而左连接会严格保留左表(即你的第一个DataFrame df1)的全部行,仅匹配右表中对应Harvest date的记录。
修正后的代码
import pandas as pd # 读取两个DataFrame df1 = pd.read_csv(r'C:\Flower_weight.csv') df2 = pd.read_csv(r'C:\Analyses.csv', encoding='unicode_escape') # 使用左连接合并,确保保留df1的所有行 merged_df = pd.merge(df1, df2, how="left", on="Harvest date") # 输出合并结果 print(merged_df)
预期合并结果
| Harvest date | Room | Quantity | Content | Thc lvl |
|---|---|---|---|---|
| 22.10.2021 | ABT1 | 120 | flower | 10 |
| 21.11.2021 | ABT2 | 100 | flower | 2 |
| 22.10.2021 | ABT1 | 10 | flower | 10 |
| 21.11.2021 | ABT2 | 2 | flower | 2 |
关键说明
how="left":核心参数,保证df1的每一行都被保留,即使df2中无对应日期的记录(若存在此类情况,对应Content和Thc lvl会显示为NaN)。- 日期格式一致性:如果合并后出现匹配失败(空值),需检查两个表的
Harvest date格式是否完全一致,可统一转为datetime类型确保匹配准确:# 统一日期格式为datetime类型 df1['Harvest date'] = pd.to_datetime(df1['Harvest date'], format='%d.%m.%Y') df2['Harvest date'] = pd.to_datetime(df2['Harvest date'], format='%d.%m.%Y')
内容的提问来源于stack exchange,提问作者Stetco Oana
相关产品推荐
相关产品推荐

