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

如何拆分DataFrame列多值单元格并将整列转换为日期类型?

解决方案

问题根源

你之前的代码错误地用str.replace(' ', '')去掉了所有空格,包括单值日期「2020-07-16 00:00:00」中的日期与时间分隔空格,导致该字符串变成非法格式,后续处理时被识别为无效值转为NaN。

正确步骤

我们需要保留单值日期的空格,仅清理多值中逗号后的空格,再拆分、展开单元格,最后统一转换为日期类型:

  1. 清理并拆分日期:只移除逗号后面的空格(而非所有空格),再按逗号拆分单元格为列表
  2. 展开列表单元格:用explode将列表中的每个日期单独占一行
  3. 转换为日期类型:利用pd.to_datetime自动识别两种日期格式,同时处理可能的无效值

完整代码

import pandas as pd

# 示例数据(可替换为你的真实数据)
data = {
    "Event Date": ["2020-07-16 00:00:00", "31/03/2022, 26/11/2018, 31/01/2028", "2021-05-20 12:30:00"]
}
df = pd.DataFrame(data)

# 1. 仅清理逗号后的空格,再拆分单元格
df["Event Date"] = df["Event Date"].str.replace(', ', ',')
df["Event Date"] = df["Event Date"].str.split(',')

# 2. 展开列表单元格,重置索引保证行号连续
df = df.explode("Event Date", ignore_index=True)

# 3. 自动识别两种日期格式,转换为日期类型
df["Event Date"] = pd.to_datetime(df["Event Date"], errors='coerce')

print(df)

代码说明

  • str.replace(', ', ','):只清理多值中逗号后的空格,避免破坏单值日期的格式
  • explode(ignore_index=True):展开列表后重置索引,防止行号混乱
  • pd.to_datetime(..., errors='coerce'):自动识别yyyy-mm-dd hh:mm:ss和dd/mm/yyyy两种格式,将无效值转为NaN(可根据需求调整errors参数)

运行结果

Event Date
0 2020-07-16
1 2022-03-31
2 2018-11-26
3 2028-01-31
4 2021-05-20

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 02:35:48