如何在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
相关产品推荐
相关产品推荐

