将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
相关产品推荐
相关产品推荐

