Remove lesser than K consecutive NaNs from pandas DataFrame(从Pandas DataFrame中删除少于K个连续NAN)
本文介绍了从Pandas DataFrame中删除少于K个连续NAN的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在处理时间序列数据。我在从数据帧列中删除小于或等于阈值的连续NAN时遇到问题。我试着查看了一些链接,如:
Identifying consecutive NaN's with pandas:标识连续NAN的位置和计数。
Pandas: run length of NaN holes:输出NAN的游程编码
这条车道上还有更多其他的,但实际上没有一个告诉我们识别后如何删除它们。
我找到了一个类似的解决方案,但在R中: How to remove more than 2 consecutive NA's in a column?
我想要使用Python语言的解决方案。
下面是示例:
这是我的数据框专栏:
a
0 36.45
1 35.45
2 NaN
3 NaN
4 NaN
5 37.21
6 35.63
7 36.45
8 34.65
9 31.45
10 NaN
11 NaN
12 36.71
13 35.55
14 NaN
15 NaN
16 NaN
17 NaN
18 37.71
如果k=3,我的输出应该是:
a
0 36.45
1 35.45
2 37.21
3 35.63
4 36.45
5 34.65
6 31.45
7 36.71
8 35.55
9 NaN
10 NaN
11 NaN
12 NaN
13 37.71
如何删除小于或等于某个阈值(K)的连续NAN。
推荐答案
有几种方法,但我是这样做的:
- 使用巧妙的
cumsum
技巧确定连续数字组 - 使用
groupby
+transform
确定每个组的大小 - 标识阈值内的NAN组
- 使用布尔索引筛选出它们。
k = 3
i = df.a.isnull()
m = ~(df.groupby(i.ne(i.shift()).cumsum().values).a.transform('size').le(k) & i)
df[m]
a
0 36.45
1 35.45
5 37.21
6 35.63
7 36.45
8 34.65
9 31.45
12 36.71
13 35.55
14 NaN
15 NaN
16 NaN
17 NaN
18 37.71
如果需要单调递增的整数索引,可以执行结尾处的df = df[m]; df.reset_index(drop=True)
步骤。
这篇关于从Pandas DataFrame中删除少于K个连续NAN的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:从Pandas DataFrame中删除少于K个连续NAN


基础教程推荐
猜你喜欢
- 在Python中从Azure BLOB存储中读取文件 2022-01-01
- PermissionError: pip 从 8.1.1 升级到 8.1.2 2022-01-01
- 使用大型矩阵时禁止 Pycharm 输出中的自动换行符 2022-01-01
- Plotly:如何设置绘图图形的样式,使其不显示缺失日期的间隙? 2022-01-01
- 在同一图形上绘制Bokeh的烛台和音量条 2022-01-01
- 无法导入 Pytorch [WinError 126] 找不到指定的模块 2022-01-01
- 修改列表中的数据帧不起作用 2022-01-01
- PANDA VALUE_COUNTS包含GROUP BY之前的所有值 2022-01-01
- 包装空间模型 2022-01-01
- 求两个直方图的卷积 2022-01-01