为什么.astype('timedelta64[D]')
无法在下面的示例中转换{
df = pd.DataFrame(pd.date_range('2017-01-01', periods=5, freq='W'), columns=['Val'])
df['Base'] = pd.datetime(2015, 1, 1)
df['Days'] = (df['Val'] - df['Base']).astype('timedelta64[D]') # Success
df['FailCast'] = (df['Val'].values - df['Base'].values).astype('timedelta64[D]') # Failure
print (df)
Val Base Days FailCast
0 2017-01-01 2015-01-01 731.0 731 days
1 2017-01-08 2015-01-01 738.0 738 days
2 2017-01-15 2015-01-01 745.0 745 days
3 2017-01-22 2015-01-01 752.0 752 days
4 2017-01-29 2015-01-01 759.0 759 days
特别是考虑到当作为一个单独的操作在事后应用时,它将成功地转换值:例如
^{pr2}$
请注意,这些是等效的:
以及
^{pr2}$在获得相同的输出后传递
.astype(int)
。在事实上,你称之为“成功”的案例实际上是一个看起来不太对劲的案例。它是一个
float64
,而不是请求的timedelta64
。在为什么?
为什么是
float64
?因为方法:其中出现以下行:
^{pr2}$调用此路径是因为以下行:
调用:
NDFrame.astype
,其中如下行:调用
numpy.ndarray.astype()
。在这种差异是由于中间产物的类型不同造成的。在
底线:
在numpy数组上调用
astype()
与pandas系列中的astype()
的行为不同。在测试代码:
结果:
相关问题 更多 >
编程相关推荐