pandas 将timedelta64[ns]转换为int,为什么`dt.days`可以,而`astype(timedelta64 [D])`不行?[重复]

ssm49v7z  于 2023-04-28  发布在  其他
关注(0)|答案(1)|浏览(376)

此问题已在此处有答案

Python numpy: cannot convert datetime64[ns] to datetime64[D] (to use with Numba)(2个答案)
4小时前关闭
日期序列是这样的:

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

有什么我错过了吗?thx提前!

iqjalb3h

iqjalb3h1#

pandas不支持此操作。
如果需要转换为timedelta64[D],请使用numpy数组:

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

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

如果您尝试转换回Series,这将强制使用受支持的类型之一:

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]

相关问题