如何将字母格式日期转换为数字格式并应用到pandas Series中
代码问题分析
- 函数内部变量未定义:你写的
datetime.strptime(bad_date, '%b %d, %Y')没有把解析后的日期对象赋值给变量,后续调用的s属于未定义变量。你单独调用函数时能成功,大概率是提前定义过全局变量s,但apply调用时函数内部无法访问到全局的s,触发报错。 - 格式化规则不符合预期:你需要的输出格式是
17.09.2021,但代码里用的%Y-%m-%d输出格式为年-月-日,和需求不符。
修正方案
方案1:修改自定义函数
from datetime import datetime def to_normal_date(bad_date): # 接收strptime返回的日期对象 date_obj = datetime.strptime(bad_date, '%b %d, %Y') # 按日.月.年格式输出 return date_obj.strftime('%d.%m.%Y') df['normal_date'] = df['date'].apply(to_normal_date)
方案2:更高效的pandas原生写法(推荐,性能远高于逐行apply)
import pandas as pd df['normal_date'] = pd.to_datetime(df['date'], format='%b %d, %Y').dt.strftime('%d.%m.%Y')
注意事项
如果运行时提示月份识别错误,是因为系统默认区域不是英文,导致英文月份缩写无法解析,可临时调整区域设置:
import locale # 临时切换为英文区域 locale.setlocale(locale.LC_TIME, 'en_US.UTF-8') df['normal_date'] = pd.to_datetime(df['date'], format='%b %d, %Y').dt.strftime('%d.%m.%Y') # 切换回默认区域 locale.setlocale(locale.LC_TIME, '')
内容的提问来源于stack exchange,提问作者Melissa
相关产品推荐
相关产品推荐

