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

如何用单条语句处理DataFrame中混合格式的Excel导入日期转换?

解决混合格式日期转换问题

针对混合字符串日期与Excel日期序列号的转换需求,可以用一条链式调用语句完成统一转换,核心逻辑是分批次处理两种格式后合并结果:

import pandas as pd

data = ['2020-01-20 00:00:00', '2020-04-27 00:00:00', '43836']
df = pd.DataFrame(data, columns=['entry_date'])

# 核心转换语句
df['entry_date'] = pd.to_datetime(df['entry_date'], errors='coerce').fillna(
    pd.to_datetime(pd.to_numeric(df['entry_date'], errors='coerce'), unit='D', origin='1899-12-30')
)

逻辑说明

  1. 优先转换标准日期:pd.to_datetime(..., errors='coerce')会把所有符合格式的字符串日期转为datetime类型,无法识别的Excel序列号字符串会被转为NaT(日期类型缺失值)。
  2. 处理Excel序列号:
    • 先用pd.to_numeric(..., errors='coerce')将原列中的序列号字符串转为数值,非数值内容转为NaN;
    • 再通过pd.to_datetime(..., unit='D', origin='1899-12-30')将数值型序列号转为对应日期(origin='1899-12-30'是为了适配Excel的1900年闰年bug);
    • 最后用fillna把第一步生成的NaT替换为转换后的序列号日期。

转换结果

执行后entry_date列会统一为datetime类型:

entry_date
0 2020-01-20
1 2020-04-27
2 2020-01-20

原报错原因说明

你直接使用unit='D'参数时,列中存在字符串类型的日期值,而unit参数要求输入必须是数值类型,因此触发类型不兼容错误。上述方法分离两种格式分别处理,再合并结果,就避免了该问题。

内容的提问来源于stack exchange,提问作者opperman.eric

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:15:31