python - 在忽略(或保留)NaN 的同时更改列格式
问题描述
我想将包含此格式值的 DataFrame 的列更改为包含hh:mm:ss
分钟数的列(同时保留 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
我还尝试使用和使用循环(不使用掩码)从hh:mm:ss
几分钟到几分钟,但在保持 NaN 的同时,我仍然不能在几分钟内拥有一个包含所有值的列(系列或 DF)...datatime.time
timedelta
解决方案
您可以使用pd.to_timedelta
将delay
列转换为 pandas timedelta 系列,然后将其除以Timedelta
of1 min
以获得总分钟数:
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
推荐阅读
- magento-2.3 - 交易失败:重复的标头“内容传输编码”。(回复 DATA 命令的结尾))问题
- php - 无法重置油门
- javascript - babel 或 webpack 或我的代码导致此错误“Uncaught TypeError: Super expression must be null or a function”
- uwp - 在 UWP 中一段时间后自动导航到新页面
- python - 将选定的浏览器文本复制到剪贴板 python
- flutter - 错误:找不到正确的提供者
在这个 BlocBuilder 之上 小部件 - chart.js - 如何在 Chart.js 中使用响应式散点图获得方形网格?
- python - 在 PyQt5 中使用 QListWidget、QLable 和 QCombo Box 创建自定义小部件?
- python - 无法将代码更改为列表理解
- r - 在闪亮的仪表板R中动态绘制多个变量