如何解决使用pd.to_datetime转换含AM/PM的DataFrame时间列报错问题
解决DataFrame时间列转换为日期类型的报错问题
嘿,这个问题我之前也碰到过!报错的原因很简单——你在pd.to_datetime的format参数里没包含时间字符串里的AM/PM标识,所以Python没办法处理这部分多余的内容,就抛出了ValueError。
问题分析
你的时间字符串格式是9:39:02 AM,包含了12小时制的时段标识(AM/PM),而你用的format='%I:%M:%S'只能匹配小时:分钟:秒的部分,完全没考虑后面的AM/PM,自然会提示“有未转换的数据残留”。
修正后的代码
只需要在format里加上%p(专门匹配12小时制的AM/PM标识)就可以了,代码如下:
dropped_col['time'] = pd.to_datetime(dropped_col.time, format='%I:%M:%S %p')
额外说明
- 转换完成后,这个列会变成
datetime64类型,包含日期(默认是当前系统日期)和时间。如果之后你只需要单独提取时间部分,可以用:dropped_col['time_only'] = dropped_col['time'].dt.time - 这个转换后的
datetime类型完全可以直接用于绘图(比如时间序列图)和统计函数,pandas会自动识别并处理。
验证效果
转换后的DataFrame会是这样的(日期为转换当天的日期):
| symbol | price | time |
|---|---|---|
| MSFT | 97.71 | 202X-XX-XX 09:39:02 |
| GOOG | 1067.87 | 202X-XX-XX 09:39:06 |
| AAPL | 187.61 | 202X-XX-XX 09:39:07 |
| CA | 35.39 | 202X-XX-XX 09:38:15 |
| SAP | 110.76 | 202X-XX-XX 09:38:13 |
内容的提问来源于stack exchange,提问作者Ann Kriebel
相关产品推荐
相关产品推荐

