我想将包含此格式 hh:mm:ss
的值的 DataFrame 的列更改为包含分钟数的列(同时保留 NaN 值)
我无法直接从 Excel 文件更改它,因此我尝试使用 pandas 进行更改(我正在使用健康数据库开发 ML 模型):
38 00:35:00
39 00:50:00
40 00:45:00
41 01:32:00
42 00:29:00
43 NaN
44 00:45:00
45 00:13:00
46 00:20:00
47 00:31:00
48 00:54:00
49 00:43:00
50 02:33:00
我尝试使用掩码将这些值与 NaN 值分开,然后使用 str.split()
转换为分钟
df1 = df['delay'][df['delay'].notnull()].astype(str).str.split(':').apply(lambda x: int(x[0]) * 60 + int(x[1]))```
df2 = df['delai_ponc_recal_calc'][df['delai_ponc_recal_calc'].isnull()]
但是我无法在不丢失顺序的情况下合并到两个系列(我在合并系列末尾得到具有正确索引的 NaN 值)
39 50
40 45
41 92
42 29
44 45
45 13
46 20
47 31
48 54
49 43
50 153
43 NaN
我还尝试使用循环(不使用mask)但我仍然无法在保持 NaN 的同时在几分钟内拥有包含所有值的列(系列或 DF)...
最佳答案
您可以使用pd.to_timedelta
将 delay
列转换为 pandas timedelta 系列,然后将其除以 1 分钟
的 Timedelta
以获得总分钟数:
pd.to_timedelta(df['delay'], errors='coerce') / pd.Timedelta(1, 'min')
39 50.0
40 45.0
41 92.0
42 29.0
43 NaN
44 45.0
45 13.0
46 20.0
47 31.0
48 54.0
49 43.0
50 153.0
Name: delay, dtype: float64
关于python - 更改列格式,同时忽略(或保留)NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64050271/