如何在Pandas中为‘fechas’列设置日期格式以开展数据分析?
嘿,我来帮你搞定这个Pandas日期格式转换的问题!先把你提供的样本数据整理成更清晰的表格,方便我们理解:
你的样本数据
| 索引 | FECHA | AÑO | NOMBRE |
|---|---|---|---|
| 0 | 3 de agosto, 2017 | 2017.0 | Ley 1831 de 2017 |
| 1 | 1 de febrero, 2017 | 2017.0 | Ley 1823 del 4 de enero de 2017 |
| 2 | 1 de febrero, 2017 | 2017.0 | Ley 1822 del 4 de enero de 2017 |
| 3 | 8 de febrero, 2017 | 2016.0 | Ley 1815 de 2016 |
| 4 | 1 de febrero, 2017 | 2016.0 | Ley 1805 del 4 de agosto de 2016 |
| 5 | 1 de febrero, 2017 | 2016.0 | Ley 1799 del 25 de julio de 2016 |
你的FECHA列是西班牙语日期格式,Pandas默认识别不了agosto、febrero这类非英文月份名,所以需要针对性处理,下面是几种实用方法:
方法1:设置西班牙语区域后指定格式解析(推荐)
先把系统区域设置为西班牙语,让Pandas能识别西班牙语月份,再用pd.to_datetime指定格式字符串:
import pandas as pd import locale # 根据你的操作系统设置对应locale: # Linux/macOS 用 'es_ES.UTF-8',Windows 用 'Spanish_Spain.1252' try: locale.setlocale(locale.LC_TIME, 'es_ES.UTF-8') except: locale.setlocale(locale.LC_TIME, 'Spanish_Spain.1252') # 假设你的DataFrame名为df,转换FECHA列 df['FECHA'] = pd.to_datetime(df['FECHA'], format='%d de %B, %Y') # 验证转换结果 print(df['FECHA'])
方法2:手动映射月份名称(无需依赖系统locale)
如果设置locale遇到问题,可以手动创建西班牙语月份到英文的映射,替换后再解析:
import pandas as pd # 西班牙语月份 → 英文月份的映射字典 month_translate = { 'enero': 'January', 'febrero': 'February', 'marzo': 'March', 'abril': 'April', 'mayo': 'May', 'junio': 'June', 'julio': 'July', 'agosto': 'August', 'septiembre': 'September', 'octubre': 'October', 'noviembre': 'November', 'diciembre': 'December' } # 替换FECHA列中的西班牙语月份 df['FECHA'] = df['FECHA'].replace(month_translate.keys(), month_translate.values(), regex=True) # 现在用英文格式解析 df['FECHA'] = pd.to_datetime(df['FECHA'], format='%d de %B, %Y') print(df['FECHA'])
方法3:让Pandas自动推断格式(适合小数据集)
如果你的数据量不大,也可以让Pandas自动尝试解析日期,不用手动指定格式,缺点是速度稍慢:
df['FECHA'] = pd.to_datetime(df['FECHA'], infer_datetime_format=True)
额外注意事项
- 如果FECHA列存在异常格式或缺失值,可以加上
errors='coerce'参数,把无法解析的日期转为NaT(Pandas的缺失日期类型):df['FECHA'] = pd.to_datetime(df['FECHA'], format='%d de %B, %Y', errors='coerce') - 转换完成后,你可以用
df['FECHA'].dt来访问日期的各种属性,比如:df['FECHA'].dt.year:提取年份df['FECHA'].dt.month_name(locale='es_ES.UTF-8'):重新获取西班牙语月份名称df['FECHA'].dt.day:提取日期天数
内容的提问来源于stack exchange,提问作者Sebastián Ramírez
相关产品推荐
相关产品推荐

