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

Pandas中datetime64[ns]与Timestamp差异及日期减法报错解决

问题解答

1. datetime64[ns] 与 Timestamp 的区别

  • datetime64[ns]是列级的数据类型,属于numpy提供的时间数组类型,pandas用它标记整列数据为时间序列,保证批量数据的存储和处理效率,是面向集合的类型定义。
  • pandas._libs.tslibs.timestamps.Timestamp是单个单元格的标量类型,是pandas封装的时间戳对象,自带丰富的时间操作方法(比如加减时间、提取年月日等)。当列的 dtype 为datetime64[ns]时,列内每个元素会自动封装成Timestamp对象——既保留了整列的存储效率,又让单个元素具备便捷的操作能力。

2. 解决日期运算报错的问题

你碰到的type object 'datetime.datetime' has no attribute 'timedelta'错误,根源是导入方式的细节:
你已经通过from datetime import datetime, timedelta把timedelta直接导入了,所以不需要再加datetime.前缀,直接写timedelta(days=1)即可。

另外更推荐用pandas自带的pd.Timedelta做时间运算,和Timestamp兼容性更好,且批量处理时用向量运算比单个赋值效率高得多,示例代码:

import pandas as pd
from datetime import timedelta

# 提取唯一日期并生成新DataFrame
dates = df['BusinessUtc'].unique()
df2 = pd.DataFrame(dates, columns=['OriginalDate'])

# 批量生成减1天的列
df2['ND_eval1'] = df2['OriginalDate'] - pd.Timedelta(days=1)
# 减2天的列
df2['ND_eval2'] = df2['OriginalDate'] - pd.Timedelta(days=2)

如果坚持单个单元格赋值,修正后的代码是:

df2['ND_eval1'][0] = dates[0] - timedelta(days=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 16:13:44