使用str.split拆分日期并展开时,如何避免单日期行返回NaN值?
问题修复:DataFrame日期拆分后单个日期返回NaN的解决方法
问题原因
你的代码中pd.to_datetime使用了dayfirst=True参数,会强制按日/月/年解析日期,但单个日期是YYYY-MM-DD格式(年-月-日),解析时会把20当成日,超出合法日期范围导致返回NaN;另外最后一行转换结果未赋值回原列,导致转换操作未生效(从你给出的处理结果看,实际运行时可能补了赋值,但核心问题是格式解析冲突)。
修正代码
import pandas as pd # 模拟原始数据 data = {"Event Date": ["2020-07-16", "31/03/2022, 26/11/2018, 31/01/2028"]} df = pd.DataFrame(data) # 去除空格并拆分多日期 df["Event Date"] = df["Event Date"].str.replace(' ', '').str.split(",") df = df.explode("Event Date") # 自动识别日期格式转换,避免强制dayfirst导致格式冲突 df['Event Date'] = pd.to_datetime(df['Event Date'], infer_datetime_format=True, errors='coerce') # 若需保留原始日期字符串格式(而非datetime类型),可使用以下代码 # df['Event Date'] = df['Event Date'].apply( # lambda x: pd.to_datetime(x, infer_datetime_format=True).strftime('%Y-%m-%d') # if pd.notna(pd.to_datetime(x, infer_datetime_format=True, errors='coerce')) # else x # ) print(df)
处理后结果
| Event Date |
|---|
| 2020-07-16 |
| 2022-03-31 |
| 2018-11-26 |
| 2028-01-31 |
如果需要保留原始的日期字符串格式(比如31/03/2022),可以启用代码中注释的部分,转换后再转回对应字符串格式。
内容的提问来源于stack exchange,提问作者lostcoder
相关产品推荐
相关产品推荐

