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

