首先把时间格式的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
查看已经是整数形式。