Pandas中匹配Date列DataFrame以实现连接/合并的问题
解决Pandas中不同格式日期的合并与求和问题
我来帮你一步步搞定这个需求,核心思路是先把两个表的日期统一成标准格式,再按日期匹配合并,最后完成数据求和,具体操作如下:
1. 读取CSV并统一日期格式
首先我们需要把两个CSV文件读入Pandas,然后重点处理第一个CSV的缩写年份,将所有日期转为标准的datetime类型(这样合并时不会出现字符串匹配的误差):
import pandas as pd # 读取两个CSV文件 df1 = pd.read_csv("csv1.csv") # 日期格式为 Aug-12(缩写年份) df2 = pd.read_csv("csv2.csv") # 日期包含完整年份对应数据 # 转换csv1的日期列:指定格式为「月份缩写-两位年份」 # %b 代表英文月份缩写(如Aug),%y代表两位年份(如12),Pandas会自动识别为2012 df1["Date"] = pd.to_datetime(df1["Date"], format="%b-%y") # 转换csv2的日期列:如果是Aug-2012格式,直接用pd.to_datetime即可自动识别 df2["Date"] = pd.to_datetime(df2["Date"])
2. 按日期合并两个DataFrame
接下来我们用merge方法按Date列合并两个表,因为你提到csv2只有41行对应数据,所以用**内连接(inner join)**可以只保留两个表都匹配的日期行:
# 内连接合并,用suffixes区分两个表的同名列 merged_df = pd.merge( df1, df2, on="Date", how="inner", suffixes=("_from_csv1", "_from_csv2") )
3. 对匹配的数据求和合并
假设你需要对两个表的数值列(比如Value、Amount这类)求和,我们可以直接对对应列做加法:
# 示例:对单个数值列求和,替换成你实际的列名 merged_df["Total_Value"] = merged_df["Value_from_csv1"] + merged_df["Value_from_csv2"] # 如果有多个数值列需要批量求和,可以这样处理 # 先筛选出两个表中的数值列(排除Date列) num_cols_csv1 = [col for col in df1.columns if col != "Date"] num_cols_csv2 = [col for col in df2.columns if col != "Date"] # 遍历对应列并求和 for col1, col2 in zip(num_cols_csv1, num_cols_csv2): merged_df[f"Total_{col1}"] = merged_df[col1] + merged_df[col2]
4. 输出目标格式的结果
最后把日期列转换成你需要的mm-yyyy(比如Aug-2012)格式,然后保存为CSV:
# 将datetime类型的Date列转为目标字符串格式 merged_df["Date"] = merged_df["Date"].dt.strftime("%b-%Y") # 保存结果到新CSV,不保留索引列 merged_df.to_csv("merged_result.csv", index=False)
注意事项
- 如果你的月份缩写是中文(比如「8月-12」),需要先设置Pandas的本地化环境,或者指定对应的format格式适配中文月份。
- 对于两位年份的识别,Pandas默认将00-69识别为2000-2069,70-99识别为1970-1999,你的数据是2012-2016,完全符合这个规则,不需要额外调整。
内容的提问来源于stack exchange,提问作者HP-Nunes
相关产品推荐
相关产品推荐

