You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含多数据类型的列统一转换为日期类型?

问题

现有数据中Event Date列的类型分布:

<class 'datetime.datetime'>    296
<class 'str'>                  116
<class 'float'>                  8

需要实现:

  1. 忽略Event Date为空的行
  2. 拆分含多个日期的字符串行,复制对应记录
  3. 将所有日期统一转为datetime类型

数据示例:

Col1Event Date
12020-07-16 00:00:00
2
331/03/2022, 26/11/2018, 31/01/2028

尝试explode方法时报错:dateutil.parser._parser.ParserError: Unknown string format: 31/03/2022, 26/11/2018, 31/01/2028 present at position 3,代码如下:

df=auto_test_file.assign(dates=auto_test_file['Event Date'].str.split(',')).explode('dates')
pd.to_datetime(df['Event Date'])
解决方案

1. 过滤空行

先移除Event Date为空(包括NaN)的行:

df_clean = auto_test_file.dropna(subset=['Event Date'])

2. 拆分多日期并展开

针对字符串类型的日期做拆分,datetime类型直接保留为单元素列表,确保explode能统一处理:

df_split = df_clean.assign(
    dates=df_clean['Event Date'].apply(
        lambda x: x.split(',') if isinstance(x, str) else [x]
    )
).explode('dates')

# 清除拆分后日期前后的空格
df_split['dates'] = df_split['dates'].str.strip()

3. 统一转换日期类型

使用dayfirst=True参数适配日/月/年格式,自动识别并转换所有日期:

df_split['Event Date'] = pd.to_datetime(df_split['dates'], dayfirst=True)

# 删除临时列,得到最终结果
df_final = df_split.drop(columns=['dates'])

完整代码

# 过滤空行
df_clean = auto_test_file.dropna(subset=['Event Date'])

# 拆分多日期行并展开
df_split = df_clean.assign(
    dates=df_clean['Event Date'].apply(
        lambda x: x.split(',') if isinstance(x, str) else [x]
    )
).explode('dates')

# 清理空格并转换日期
df_split['dates'] = df_split['dates'].str.strip()
df_split['Event Date'] = pd.to_datetime(df_split['dates'], dayfirst=True)

# 最终结果
df_final = df_split.drop(columns=['dates'])

内容的提问来源于stack exchange,提问作者lostcoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 06:55:31