如何用单条语句处理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') )
逻辑说明
- 优先转换标准日期:
pd.to_datetime(..., errors='coerce')会把所有符合格式的字符串日期转为datetime类型,无法识别的Excel序列号字符串会被转为NaT(日期类型缺失值)。 - 处理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
相关产品推荐
相关产品推荐

