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
相关产品推荐
相关产品推荐

