加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 使用pandas识别连续的NaN

发布时间:2020-12-20 11:41:29 所属栏目:Python 来源:网络整理
导读:我正在阅读一堆CSV文件(水位随时间变化的测量数据),对它们进行各种分析和可视化. 由于我无法控制的各种原因,这些时间序列通常会丢失数据,所以我做了两件事: 我总计算他们 Rlength=len(RainD) #counts everything,including NaNRcount=RainD.count() #counts
我正在阅读一堆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)

现在问题是:它的月度数据,所以如果我有超过2个连续NaN,我也想丢弃数据,因为这意味着我“猜测”整个赛季,甚至更多.

documentation for fillna并没有真正提到当连续NaN超过我指定的限制= 2时会发生什么,但当我在…之前和之后查看RainD.describe()时…并将其与基本CSV进行比较,很明显它填充了前2个NaN,然后??将其余部分保留原样,而不是错误输出.

所以,长话短说:

如何用熊猫识别一些连续的NaN,没有一些复杂和耗时的非熊猫循环?

解决方法

您可以使用多个布尔条件来测试当前值和先前值是否为NaN:

In [3]:

df = pd.DataFrame({'a':[1,3,np.NaN,4,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

如果您想要找到连续NaN出现在哪里的位置,您可以执行以下操作:

In [38]:

df = pd.DataFrame({'a':[1,2,8,9,10,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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读