Google Colab中CSV日期列格式统一问题求助
解决CSV多格式日期统一转换问题
问题原因分析
- 格式不匹配报错:你编写的转换函数仅指定了
%m/%d/%y(斜杠分隔、两位年份)的格式,但数据中存在另一种%m-%d-%Y(连字符分隔、四位年份)的日期格式,导致解析失败。另外代码中存在拼写错误:purhcase_date应为purchase_date。 - "'Series' object has no attribute 'year'"报错:你直接对未转换为datetime类型的
object列调用year属性,只有datetime64类型的列才能通过.dt.year访问年份。
解决方案
方法一:使用pandas内置函数自动识别(推荐)
pandas的pd.to_datetime可以自动识别多种常见日期格式,无需手动处理每种格式:
import pandas as pd # 将purchase_date列转换为datetime类型 project_data['purchase_date'] = pd.to_datetime(project_data['purchase_date'], errors='coerce') # 统一转为目标格式,例如'YYYY-MM-DD' project_data['formatted_date'] = project_data['purchase_date'].dt.strftime('%Y-%m-%d') # 如需提取年份,使用.dt.year project_data['year'] = project_data['purchase_date'].dt.year
errors='coerce':将无法识别的无效日期转为NaT(缺失值),便于后续排查处理。
方法二:自定义函数处理两种格式
如果你需要手动控制解析逻辑,可以通过异常捕获处理两种格式:
import datetime def parse_date(x): try: # 尝试解析斜杠分隔的格式(如8/21/2013) return datetime.datetime.strptime(x, '%m/%d/%Y') except ValueError: # 失败则解析连字符分隔的格式(如09-04-2012) return datetime.datetime.strptime(x, '%m-%d-%Y') # 注意修正拼写错误:purhcase_date → purchase_date project_data['new_'] = project_data['purchase_date'].apply(parse_date) # 提取年份 project_data['year'] = project_data['new_'].dt.year
内容的提问来源于stack exchange,提问作者Prateek Kumar Agarwal
相关产品推荐
相关产品推荐

