如何统一两个DataFrame日期列格式以实现数据库表关联?
统一两个DataFrame的日期格式解决方案
问题背景
你有两个DataFrame,其中:
- DataFrame 1的日期列为整数类型的
YYYYMMDD(如20140101) - DataFrame 2的日期列为字符串类型的
date(如2012-01-01)
需要统一日期格式以实现关联操作,此前使用to_datetime时出现日期重复、与原文件不符的问题,核心原因是未正确指定日期格式或处理数据类型。
解决方案
方案1:将DataFrame 1的YYYYMMDD转为yyyy-mm-dd格式(匹配DataFrame 2)
先把整数类型的日期转为字符串,再指定格式解析为datetime类型,也可按需转为字符串格式:
import pandas as pd # 转换为datetime类型(推荐用于后续关联,避免字符串格式问题) df1['date'] = pd.to_datetime(df1['YYYYMMDD'].astype(str), format='%Y%m%d') # 若需转为字符串格式完全匹配df2的date列 # df1['date'] = df1['date'].dt.strftime('%Y-%m-%d') # 可选:删除原日期列 df1.drop('YYYYMMDD', axis=1, inplace=True)
方案2:将DataFrame 2的date转为YYYYMMDD格式(匹配DataFrame 1)
先解析字符串日期为datetime类型,再转为指定格式的整数或字符串:
import pandas as pd # 转换为datetime类型 df2['YYYYMMDD'] = pd.to_datetime(df2['date']) # 转为整数格式的YYYYMMDD df2['YYYYMMDD'] = df2['YYYYMMDD'].dt.strftime('%Y%m%d').astype(int) # 若需转为字符串格式 # df2['YYYYMMDD'] = df2['YYYYMMDD'].dt.strftime('%Y%m%d') # 可选:删除原日期列 df2.drop('date', axis=1, inplace=True)
最优建议:统一用datetime类型关联
无需转为字符串,直接将两个日期列转为datetime类型后执行关联,彻底避免字符串格式的潜在问题:
# 统一转换为datetime类型 df1['date'] = pd.to_datetime(df1['YYYYMMDD'].astype(str), format='%Y%m%d') df2['date'] = pd.to_datetime(df2['date']) # 执行关联操作 merged_df = pd.merge(df1, df2, on='date')
内容的提问来源于stack exchange,提问作者amanie11
相关产品推荐
相关产品推荐

