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

