如何拆分DataFrame列多值单元格并将整列转换为日期类型?
解决方案
问题根源
你之前的代码错误地用str.replace(' ', '')去掉了所有空格,包括单值日期「2020-07-16 00:00:00」中的日期与时间分隔空格,导致该字符串变成非法格式,后续处理时被识别为无效值转为NaN。
正确步骤
我们需要保留单值日期的空格,仅清理多值中逗号后的空格,再拆分、展开单元格,最后统一转换为日期类型:
- 清理并拆分日期:只移除逗号后面的空格(而非所有空格),再按逗号拆分单元格为列表
- 展开列表单元格:用
explode将列表中的每个日期单独占一行 - 转换为日期类型:利用
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
相关产品推荐
相关产品推荐

