gpt4 book ai didi

python - 从 pandas DataFrame 中删除少于 K 个连续的 NaN

转载 作者:太空宇宙 更新时间:2023-11-03 10:51:47 25 4
gpt4 key购买 nike

我正在处理时间序列数据。从数据框列中删除小于或等于阈值的连续 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。

最佳答案

有几种方法,但我是这样做的:

  1. 使用巧妙的 cumsum 技巧确定连续数字组
  2. 使用groupby + transform确定每组的大小
  3. 识别阈值内的 NaN 组
  4. 使用 bool 索引过滤掉它们。

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) 如果您想要单调递增的整数索引,请在最后一步。

关于python - 从 pandas DataFrame 中删除少于 K 个连续的 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48800345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com