将 timedelta64[ns] 转换为 int,为什么 `dt.days` 起作用而 `astype(timetelta64[D])` 不起作用?

问题描述 投票:0回答:1

日期系列是这样的:

df.d_num_active.head()

# result
0   191 days
1    49 days
2   273 days
3   287 days
4   634 days
Name: d_num_active, dtype: timedelta64[ns]

问题:

df.d_num_active.head().astype('timedelta64[D]')
返回
ValueError: Cannot convert from timedelta64[ns] to timedelta64[D]. Supported resolutions are 's', 'ms', 'us', 'ns'

问题是:

一方面,根据这个answer和这个answer似乎应该没问题。

另一方面

dt.days
作品:

df.d_num_active.head().dt.days

# result
0    191
1     49
2    273
3    287
4    634

我错过了什么吗?提前谢谢!

python-3.x pandas datetime timedelta
1个回答
1
投票

pandas 不支持。

如果需要转换为

timedelta64[D]
,使用numpy数组:

df['d_num_active'].to_numpy().astype('timedelta64[D]')

# array([191,  49, 273, 287, 634], dtype='timedelta64[D]')

如果您尝试转换回系列,这将强制支持一种类型:

pd.Series(df['d_num_active'].to_numpy().astype('timedelta64[D]'))

0   191 days 00:00:00
1    49 days 00:00:00
2   273 days 00:00:00
3   287 days 00:00:00
4   634 days 00:00:00
dtype: timedelta64[s]



pd.to_timedelta(df['d_num_active'].dt.days, unit='D')

0   191 days
1    49 days
2   273 days
3   287 days
4   634 days
Name: d_num_active, dtype: timedelta64[ns]
© www.soinside.com 2019 - 2024. All rights reserved.