在Python中,我有一个使用pandas生成(或从CSV文件中读取)的日期数组,我想在每个日期上添加一年。我可以用熊猫,但不能用纽比。我做错什么了?或者它是熊猫或纽比的虫子?在
谢谢!在
import numpy as np
import pandas as pd
from pandas.tseries.offsets import DateOffset
# Generate range of dates using pandas.
dates = pd.date_range('1980-01-01', '2015-01-01')
# Add one year using pandas.
dates2 = dates + DateOffset(years=1)
# Convert result to numpy. THIS WORKS!
dates2_np = dates2.values
# Convert original dates to numpy array.
dates_np = dates.values
# Add one year using numpy. THIS FAILS!
dates3 = dates_np + np.timedelta64(1, 'Y')
# TypeError: Cannot get a common metadata divisor for NumPy datetime metadata [ns] and [Y] because they have incompatible nonlinear base time units
下面是它在numpy documentation中所说的:
不过,几天和几周似乎很管用:
将
np.timedelta64(1, 'Y')
添加到数据类型datetime64[ns]
的数组中无效,因为一年并不对应于固定的纳秒数。有时一年是365天,有时是366天,有时甚至有额外的闰秒。(请注意,额外的闰秒,例如发生在2015-06-30 23:59:60的闰秒不能表示为NumPy datetime64s。)我知道的向NumPy
datetime64[ns]
数组添加一年的最简单方法是将其分成若干部分,例如年、月和日,在整数数组上进行计算,然后重新组合datetime64数组:收益率
^{pr2}$尽管看起来有这么多代码,但实际上比添加日期偏移量1年要快:
当然,pd.tseries.offsets提供了一整套偏移量,在使用NumPy datetime64时,这些偏移量没有简单的对应项
相关问题 更多 >
编程相关推荐