pandas转换dd-mmm-yy格式文本日期时调用.dt访问器报错
报错根因
AttributeError: Can only use .dt accessor with datetimelike values 的触发原因非常明确:pandas中的*.dt访问器仅支持datetime、timedelta类的时间类型Series*,你的date_text列是文本类型(object/string dtype),不支持.dt系列时间操作,直接调用必然触发报错。
修复步骤
你需要先将文本格式的日期列转换为pandas内置的datetime类型,再执行格式转换操作:
- 调用
pd.to_datetime()完成文本到时间类型的转换,由于你的原始日期格式固定为dd-mmm-yy(例:01-Jun-22),显式指定匹配格式可以提升解析效率,同时避免自动识别的格式错误:
import pandas as pd # 文本列转datetime类型 df['date_parsed'] = pd.to_datetime(df['date_text'], format='%d-%b-%y')
- 类型转换完成后,再调用
.dt.strftime()输出你需要的dd/mmm/yy格式字符串:
df['new_date'] = df['date_parsed'].dt.strftime('%d/%b/%y')
异常处理补充
如果列中存在不符合规范的坏日期值,转换时可能报错,可以添加errors='coerce'参数,将无法解析的异常值统一转为空时间值NaT,避免流程中断:
df['date_parsed'] = pd.to_datetime(df['date_text'], format='%d-%b-%y', errors='coerce')
注意:
strftime的作用是将datetime类型转为指定格式的字符串,无法直接作用在文本类型的列上;字符串转datetime类型需要用pd.to_datetime()完成,操作顺序不能搞反。
内容的提问来源于stack exchange,提问作者Ran Antes
相关产品推荐
相关产品推荐

