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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:15:04