如何使用pandas的datetime64[ns]计算日期间隔并生成新列
登山数据集登顶耗时计算问题修复
原始问题
我是一名大学生,在数据分析课程作业中需要处理登山探险数据集,计算登山者从大本营到最高点的耗时天数。我计划基于expeditions['basecamp_date']和expeditions['highpoint_date']两列计算间隔天数,将结果存入新列expeditions['days_reach_top'],方便后续计算平均值等指标。
我目前编写的代码如下:
expeditions['basecamp_date']=pd.to_datetime(expeditions['basecamp_date']) expeditions['highpoint_date']=pd.to_datetime(expeditions['highpoint_date']) expeditions['termination_date']=pd.to_datetime(expeditions['termination_date']) date_format = "%Y-%m-%d/ns" a = datetime.strptime(str(expeditions['basecamp_date']), date_format) b = datetime.strptime(str(expeditions['highpoint_date']), date_format) delta = b - a print (delta.days) expeditions['days_reach_top']
运行代码时抛出ValueError("unconverted data remains: %s" %和ValueError("time data %r does not match format %r" %报错,请问该如何修复时间格式问题,完成日期间隔计算并将结果写入新列?
数据集样例:
报错原因
- 调用方法不匹配:
datetime.strptime仅支持解析单个字符串格式的时间,你将整列pandas Series转为字符串后格式和自定义的%Y-%m-%d/ns完全不匹配,因此抛出格式报错 - 逻辑冗余:你已经通过
pd.to_datetime将两列数据转为pandas datetime64类型,不需要再转字符串后用datetime库二次解析 - 新列缺少赋值逻辑:最后一行仅调用了未创建的新列,没有赋值操作会抛出键不存在报错
修复后的完整代码
import pandas as pd # 转时间类型时添加errors参数,把无法解析的异常值转为空值避免报错 expeditions['basecamp_date'] = pd.to_datetime(expeditions['basecamp_date'], errors='coerce') expeditions['highpoint_date'] = pd.to_datetime(expeditions['highpoint_date'], errors='coerce') expeditions['termination_date'] = pd.to_datetime(expeditions['termination_date'], errors='coerce') # pandas支持矢量运算直接计算两列时间差,提取天数存入新列 expeditions['days_reach_top'] = (expeditions['highpoint_date'] - expeditions['basecamp_date']).dt.days
后续使用示例
计算平均登顶耗时:
avg_days = expeditions['days_reach_top'].mean() print(f"平均登顶耗时{avg_days:.1f}天")
内容的提问来源于stack exchange,提问作者Solène Mehaudens
相关产品推荐
相关产品推荐

