python 时间间隔 timedelta64[ns] 转化成整数格式

首先把时间格式的naT转换成0 days

查询数据类型

查询数据框data_onset中onset_days 列第13~16行 数据:

>>> data_onset.onset_days[13:16]
13   13 days
14       NaT
15       NaT
Name: onset_days, dtype: timedelta64[ns]
Name: onset_days, dtype: timedelta64[ns]

格式为timedelta64[ns]

首先将缺失数据(NaT)填充为0:

>>> data_onset.onset_days.fillna(0)

出现“TypeError: Passing integers to fillna for timedelta64[ns] dtype is no longer supported. “ 错误:
在这里插入图片描述
时间差 timedelta64[ns] 格式不能直接用0代替。需要加上参数 pd.Timedelta(seconds=0):

>>> data_onset.onset_days.fillna(pd.Timedelta(seconds=0),inplace=True)
>>>  data_onset.onset_days[13:16]
13   13 days
14    0 days
15    0 days
Name: onset_days, dtype: timedelta64[ns]

将时间差转换成数字格式

>>> data_onset.onset_days.astype('str').apply(lambda x:x[:-5]).astype('int32')
0      10
1      12
2       8
3      10
4      12
       ..
265    11
266    15
267    15
268    12
269    12
Name: onset_days, Length: 268, dtype: int32

思路是首先转换成字符串格式:

>>>data_onset.onset_days.astype('str')
0      10 days
1      12 days
2       8 days
3      10 days
4      12 days
        ...   
265    11 days
266    15 days
267    15 days
268    12 days
269    12 days
Name: onset_days, Length: 268, dtype: object

然后利用apply和匿名函数取里面每个元素中的数字部分,去掉后四位[:-5] :

>>> data_onset.onset_days.astype('str').apply(lambda x:x[:-5])
0      10
1      12
2       8
3      10
4      12
       ..
265    11
266    15
267    15
268    12
269    12
Name: onset_days, Length: 268, dtype: object

然后字符串之间转换成int32格式即可:

>>> data_onset.onset_days.astype('str').apply(lambda x:x[:-5]).astype('int32')
0      10
1      12
2       8
3      10
4      12
       ..
265    11
266    15
267    15
268    12
269    12
Name: onset_days, Length: 268, dtype: int32

查看已经是整数形式。

猜你喜欢

转载自blog.csdn.net/weixin_44022515/article/details/109646080