python - 更改列格式,同时忽略(或保留)NaN

标签 python pandas nan

我想将包含此格式 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_timedeltadelay 列转换为 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/

相关文章:

没有复制的 Pandas 数据框

python - 如何在 output.csv 文件中包含 "for"循环变量

c++ - NAN -> 区分除以零和具有非常大的负值的指数

python - Inf 和 NaN 是如何实现的?

Python实时变化的热图绘制

python - str.replace() 的时间复杂度是 O(n^2) 吗?

python - 如何使用一个顶级列对多索引 pandas 数据框进行排序?

python - 如何使用排序在 Unix 中按字母数字顺序排序?比看起来更复杂

python - 用dask对非常大的数据进行排序?

java - 高斯随机分布的 NaN 误差