Identifying consecutive NaNs with Pandas(识别具有 pandas 的连续NAN)
本文介绍了识别具有 pandas 的连续NAN的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在读入一堆CSV文件(一段时间内水位的测量数据),以便对它们进行各种分析和可视化。
由于各种我无法控制的原因,这些时间序列经常有缺失数据,所以我做了两件事:
我用
合计Rlength = len(RainD) # Counts everything, including NaN
Rcount = RainD.count() # Counts only valid numbers
NaN_Number = Rlength - Rcount
如果缺少的数据多于某个阈值,则丢弃数据集:
Percent_Data = Rlength/100
Five_Percent = Percent_Data*5
if NaN_Number > Five_Percent:
...
如果NaN的数量足够少,我想用
来填补空白RainD.level = RainD.level.fillna(method='pad', limit=2)
现在是问题:这是月度数据,所以如果我有两个以上的连续NAN,我也想丢弃这些数据,因为这意味着我要猜测整个赛季,甚至更长时间。
documentation for fillna实际上并没有提到当连续的NaN比我指定的limit=2多时会发生什么,但是当我查看...fillna...之前和之后的RainD.describe()并将其与基本CSV进行比较时,很明显它填充了前两个NaN,然后保留其余的,而不是出错。
所以,长话短说:
如何使用Pandas标识多个连续的NAN,而不会出现一些复杂且耗时的非Pandas循环?
推荐答案
可以使用多个布尔条件来测试当前值和上一个值是否为NaN:
In [3]:
df = pd.DataFrame({'a':[1,3,np.NaN, np.NaN, 4, np.NaN, 6,7,8]})
df
Out[3]:
a
0 1
1 3
2 NaN
3 NaN
4 4
5 NaN
6 6
7 7
8 8
In [6]:
df[(df.a.isnull()) & (df.a.shift().isnull())]
Out[6]:
a
3 NaN
如果要查找连续NaNs出现的位置,您可以执行以下操作:
In [38]:
df = pd.DataFrame({'a':[1,2,np.NaN, np.NaN, np.NaN, 6,7,8,9,10,np.NaN,np.NaN,13,14]})
df
Out[38]:
a
0 1
1 2
2 NaN
3 NaN
4 NaN
5 6
6 7
7 8
8 9
9 10
10 NaN
11 NaN
12 13
13 14
In [41]:
df.a.isnull().astype(int).groupby(df.a.notnull().astype(int).cumsum()).sum()
Out[41]:
a
1 0
2 3
3 0
4 0
5 0
6 0
7 2
8 0
9 0
Name: a, dtype: int32
这篇关于识别具有 pandas 的连续NAN的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
编程基础网
本文标题为:识别具有 pandas 的连续NAN
基础教程推荐
猜你喜欢
- 由Python将MP3转换为MIDI(类型错误:无法加载插件:mtg-Melodia:Melodia) 2022-01-01
- 在 Celery 工作人员中捕获 Heroku SIGTERM 以优雅地关 2022-01-01
- 将 x 轴刻度更改为自定义字符串 2022-01-01
- 尝试制作WhatsApp机器人 2022-01-01
- pyserial - 可以从线程 a 写入串行端口,是否阻塞从线程 b 读取? 2022-01-01
- 用 Python 编写 Fortran 无格式文件 2022-01-01
- 与常规 dict 相比,Python manager.dict() 非常慢 2022-01-01
- numpy float:比算术运算中内置的慢 10 倍? 2022-01-01
- Discord.py 缺少必需的参数 2022-01-01
- 使用生成器和迭代器时 Python 多循环失败 2022-01-01
