如何将CSV中带毫秒的日期时间列转换为带毫秒的Datetime类型
问题分析与解决方法
代码错误原因
你的datetime.strptime格式字符串有两处问题:
- 毫秒部分的格式符使用错误:应该用
.%f表示秒后的小数部分(%f对应微秒,会自动适配1-6位的毫秒/微秒数值),你写成了.f - 格式字符串末尾多了一个多余的
%,这就是触发ValueError: stray % in format的直接原因
正确解决方案
方案1:修正strptime格式
调整格式字符串为正确的写法,即可正常解析:
from datetime import datetime df['datetime'] = df['datetime'].apply(lambda x: datetime.strptime(x, '%Y/%m/%d %H:%M:%S.%f'))
方案2:使用Pandas内置方法更高效
Pandas的pd.to_datetime支持直接解析拼接后的日期时间字符串,甚至无需手动拼接列,效率远高于apply循环:
import pandas as pd # 方式1:自动识别格式 df['datetime'] = pd.to_datetime(df['Date'] + ' ' + df['Time']) # 方式2:指定格式提升解析速度(推荐大数据量时使用) df['datetime'] = pd.to_datetime(df['Date'] + ' ' + df['Time'], format='%Y/%m/%d %H:%M:%S.%f')
补充说明
%f格式符可以匹配1到6位的小数部分,完全适配你数据中1位、2位、3位的毫秒数值- 若数据中存在不规范的日期时间格式,可添加
errors='coerce'参数将无效值转为NaT,方便后续处理
内容的提问来源于stack exchange,提问作者stanvooz
相关产品推荐
相关产品推荐

