You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统一两个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 17:42:45