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

将DataFrame中格式为‘January 1, 2001 Monday’的date列转datetime报错求助

解决方法

报错原因很直接:你试图把datetime对象存入原本是string类型的列里,而pandas的StringArray只允许存储字符串,所以触发了ValueError。

给你两种靠谱的解决方式:

方法1:用pandas原生的to_datetime(推荐,效率更高)

不用写循环,直接用向量化操作搞定:

自动识别格式

import pandas as pd
df['date'] = pd.to_datetime(df['date'], infer_datetime_format=True)

指定格式(更高效,适合已知格式的情况)

因为你的日期格式是January 1, 2001 Monday,对应格式符%B %d, %Y %A,直接指定格式比自动识别更快:

df['date'] = pd.to_datetime(df['date'], format='%B %d, %Y %A')

格式符说明:

  • %B:完整月份名称(比如January)
  • %d:两位数字的日期(不足补0)
  • %Y:四位数年份
  • %A:完整星期名称(比如Monday)

方法2:用dateutil.parser配合apply

如果一定要用dateutil的解析器,别用循环逐个修改元素,改用apply批量处理,它会自动把列类型转换成datetime:

from dateutil import parser
df['date'] = df['date'].apply(lambda x: parser.parse(x))

注意:尽量避免用循环遍历DataFrame的元素,pandas的向量化操作(比如to_datetime、apply)不仅代码更简洁,执行效率也比循环高得多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 17:56:05