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

Pandas字符串列转datetime遇TypeError错误的技术求助

解决Pandas日期列转换及差值计算问题

看起来你遇到的问题根源在于日期格式不统一,同时数据中还存在缺失值,导致pd.to_datetime无法自动解析所有字符串。咱们一步步来解决:

问题分析

从你的数据样例可以看到,日期字符串有两种格式:

  • 格式1:YYYYMMDD(比如20180516,代表2018年5月16日)
  • 格式2:MMDDYYYY(比如6172018,实际是06172018,代表2018年6月17日)
    另外最后一行的Depart列还有缺失值,这也会干扰解析过程。直接调用pd.to_datetime不指定格式时,Pandas无法同时识别这两种混合格式,因此抛出TypeError。

解决步骤

1. 统一解析所有日期列

我们可以分两步解析:先尝试第一种格式,把无法解析的行用第二种格式再处理,同时将无法解析的值转为NaT(Pandas的缺失日期类型):

import pandas as pd

# 定义两种可能的日期格式
date_formats = ['%Y%m%d', '%m%d%Y']

# 循环处理每一列
for col in ['date', 'Arrive', 'Depart']:
    # 先用YYYYMMDD格式解析,失败的转为NaT
    df2[col] = pd.to_datetime(df2[col], format=date_formats[0], errors='coerce')
    # 筛选出未解析成功的行
    unparsed_mask = df2[col].isna()
    # 对这些行用MMDDYYYY格式重新解析
    df2.loc[unparsed_mask, col] = pd.to_datetime(df2.loc[unparsed_mask, col], format=date_formats[1], errors='coerce')

执行完这段代码后,你可以打印df2查看转换结果:

print(df2)

此时所有合法的日期都会被转为datetime64类型,缺失值或格式错误的值会变成NaT。

2. 计算日期差值

转换完成后,直接做减法就能得到天数差:

# 计算搜索日期到入住日期的间隔
df2['search_to_arrive'] = df2['Arrive'] - df2['date']
# 计算入住到退房的间隔
df2['arrive_to_depart'] = df2['Depart'] - df2['Arrive']

结果会是Timedelta类型,如果你需要纯数字的天数,可以用.dt.days提取:

df2['search_to_arrive_days'] = df2['search_to_arrive'].dt.days
df2['arrive_to_depart_days'] = df2['arrive_to_depart'].dt.days

额外提示

如果转换后还有NaT值,说明这些行的日期格式不在我们定义的两种格式里,你可以查看这些值的具体内容,调整date_formats列表来覆盖更多格式,或者手动修正数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:12:19