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

如何转换Pandas DataFrame中含不一致小数秒的列为datetime类型

处理混合小数秒的日期列转换问题

方法1:直接让Pandas自动识别(最省心)

不用手动指定格式,直接调用pd.to_datetime()即可,它能自动兼容带或不带小数秒的日期字符串:

df['datetime'] = pd.to_datetime(df['datetime'])

转换后的结果会自动补全缺失的小数秒为.000000:

0   2000-01-20 12:00:00.000
1   2000-01-20 12:00:00.500
2   2000-01-20 12:00:01.000
Name: datetime, dtype: datetime64[ns]

这种方法适合数据量不大的场景,大数据量下自动推断效率会稍低,但胜在操作简单。

方法2:统一字符串格式后精准转换

如果追求更高效率,先把所有日期字符串改成统一带小数秒的格式,再指定格式转换:

# 用正则给没有小数秒的时间末尾加上 .0
df['datetime'] = df['datetime'].str.replace(r'(\d{2}:\d{2}:\d{2})$', r'\1.0')
# 现在所有字符串都符合带小数秒的格式,直接指定format转换
df['datetime'] = pd.to_datetime(df['datetime'], format='%b %d, %Y %H:%M:%S.%f')

正则表达式会匹配末尾是HH:MM:SS的部分,自动补上.0,确保所有格式一致,转换时不会报错。

方法3:分两种格式转换后合并

也可以分别用两种格式尝试转换,再把结果合并:

# 先转带小数秒的格式,转失败的设为NaN
dt_with_ms = pd.to_datetime(df['datetime'], format='%b %d, %Y %H:%M:%S.%f', errors='coerce')
# 再转不带小数秒的格式,转失败的设为NaN
dt_no_ms = pd.to_datetime(df['datetime'], format='%b %d, %Y %H:%M:%S', errors='coerce')
# 合并:如果带小数秒的转换失败,就用不带的结果
df['datetime'] = dt_with_ms.fillna(dt_no_ms)

这种方式逻辑清晰,适合格式更复杂的混合场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 04:12:54