多格式日期修复:提取日字段并结合年月列重构统一日期
处理混合格式日期的DataFrame:提取日并重构统一日期格式
给定的DataFrame包含多种日期格式(如yyyy-mm-dd、dd/mm/yyyy、mm/dd/yyyy及带时间戳的格式),同时已有year和month列。需要完成以下操作:
- 从混合格式的日期中提取日,存入
Day_from_date列 - 结合
year、month和提取出的日,生成统一格式的New_date列
示例DataFrame
import pandas as pd df = pd.DataFrame([ ['2023-01-02 00:00:00','01','2023'], ['2023-01-02 00:00:00','01','2023'], ['01/16/2023','01','2023'], ['01/16/2023','01','2023'], ['01/16/2023','01','2023'], ['02/13/2023','02','2023'], ['02/13/2023','02','2023'], ['02/13/2023','02','2023'], ['26/11/2018','11','2018'], ['26/11/2018','11','2018'], ['26/11/2018','11','2018'], ['26/11/2018','11','2018'], ['27/11/2018','11','2018'], ['27/11/2018','11','2018'], ], columns=['Date','month','year'])
解决方案代码
# 解析混合格式日期为datetime对象,自动识别常见格式,dayfirst适配dd/mm/yyyy类格式 df['parsed_date'] = pd.to_datetime(df['Date'], dayfirst=True, errors='coerce') # 提取日并转为两位数字符串格式 df['Day_from_date'] = df['parsed_date'].dt.day.astype(str).str.zfill(2) # 用year、month、Day_from_date重构统一yyyy-mm-dd格式的日期 df['New_date'] = pd.to_datetime({ 'year': df['year'], 'month': df['month'], 'day': df['Day_from_date'] }).dt.strftime('%Y-%m-%d') # 移除中间解析列(可选) df = df.drop('parsed_date', axis=1) print(df)
代码说明
- 日期解析:
pd.to_datetime自动识别多数常见日期格式,dayfirst=True优先处理日在前的斜杠分隔日期,errors='coerce'将无法解析的日期转为NaT便于排查。 - 提取日:从解析后的datetime对象中提取日,转为字符串并补零,保证统一的两位数格式。
- 重构统一日期:通过三列生成datetime对象,再格式化为标准的
yyyy-mm-dd字符串。
输出结果示例
| Date | month | year | Day_from_date | New_date |
|---|---|---|---|---|
| 2023-01-02 00:00:00 | 01 | 2023 | 02 | 2023-01-02 |
| 2023-01-02 00:00:00 | 01 | 2023 | 02 | 2023-01-02 |
| 01/16/2023 | 01 | 2023 | 16 | 2023-01-16 |
| 01/16/2023 | 01 | 2023 | 16 | 2023-01-16 |
| ... | ... | ... | ... | ... |
内容的提问来源于stack exchange,提问作者Natali
相关产品推荐
相关产品推荐

