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

如何在Pandas中将object、integer列转换并合并为datetime格式

解决方法

1. 修正日期列转换错误

你之前使用%Y-%M-%d格式是错误的:%M代表分钟,而非月份。正确的月份格式符是%m,转换代码应为:

df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d')

执行后date列会正确解析为2022-04-21这类日期格式,不会出现月份错乱的问题。

2. 处理整数类型的时间列

time列是int32类型(如610对应6:10,1751对应17:51),需要先将其转为4位补零字符串,再解析为时间格式:

# 转为4位字符串,不足补前导零
df['time_str'] = df['time'].astype(str).str.zfill(4)
# 解析为时间格式,提取time部分
df['time_dt'] = pd.to_datetime(df['time_str'], format='%H%M').dt.time

也可以跳过中间列,直接一步处理:

df['time_dt'] = pd.to_datetime(df['time'].astype(str).str.zfill(4), format='%H%M').dt.time

3. 合并日期与时间为datetime列

现在可以将date(datetime类型)和处理后的time_dt(time类型)合并为完整的datetime列:

df['datetime'] = pd.to_datetime(df['date'].astype(str) + ' ' + df['time_dt'].astype(str))

完整可运行代码

import pandas as pd

# 构造示例数据
data = {
    'date': ['2022-04-21', '2022-04-22', '2022-04-22'],
    'time': [610, 610, 1751]
}
df = pd.DataFrame(data)
df['time'] = df['time'].astype('int32')

# 1. 转换date列
df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d')

# 2. 处理time列
df['time_dt'] = pd.to_datetime(df['time'].astype(str).str.zfill(4), format='%H%M').dt.time

# 3. 合并生成datetime列
df['datetime'] = pd.to_datetime(df['date'].astype(str) + ' ' + df['time_dt'].astype(str))

# 可选:删除中间辅助列
df = df.drop('time_dt', axis=1)

print(df)

运行后输出结果:

date  time            datetime
0 2022-04-21   610 2022-04-21 06:10:00
1 2022-04-22   610 2022-04-22 06:10:00
2 2022-04-22  1751 2022-04-22 17:51:00

补充说明

  • 若需要将datetime列显示为2022-04-21 6:10这种无秒数的格式,可使用df['datetime'].dt.strftime('%Y-%m-%d %H:%M')转为字符串,但会丢失datetime类型的可计算特性,建议保留原datetime类型,按需格式化显示。
  • 你之前直接拼接字符串失败,是因为date转为datetime后默认带00:00:00后缀,且time整数转字符串后无冒号,拼接结果格式不合法,无法被解析为datetime类型。

内容的提问来源于stack exchange,提问作者snowballtrader

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 21:20:29