用大熊猫识别连续的南半球

我正在阅读大量CSV文件(随时间变化的水位测量数据),以便对其进行各种分析和可视化

由于我无法控制的各种原因,这些时间序列经常缺少数据,因此我做了两件事:

我把它们加在一起算

Rlength=len(RainD)#计算一切,包括NaN
Rcount=RainD.count()#只计算有效数字
NaN_编号=Rlength-Rcount

如果丢失的数据超过某个阈值,则丢弃数据集:

百分比数据=Rlength/100
百分之五=百分之五数据*5
如果NaN_编号>百分之五:
...

如果NaN的数量足够少,我想用

RainD.level=RainD.level.fillna(方法='pad',限值=2)

现在来看这个问题:这是每月的数据,所以如果我有两个以上连续的NAN,我也想丢弃数据,因为这意味着我;猜测;整整一季,甚至更多

fillna的文档并没有真正提到当连续的NAN多于我指定的limit=2时会发生什么,但是当我查看RainD.descripe()前后的…fillna…并将其与基本CSV进行比较时,很明显它填充了前两个NAN,然后让其余的保持原样,而不是出错

长话短说:

如何在没有复杂且耗时的非熊猫循环的情况下,识别多个连续的熊猫NAN?

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

[3]on

:
df=pd.DataFrame({'a':[1,3,np.NaN,np.NaN,4,np.NaN,6,7,8]})
df
Output[3]:
A.
0   1
1   3
2楠
3南
4   4
5南
6   6
7   7
8   8
At[6]on:
df[(df.a.isnull())和(df.a.shift().isnull())]
Output[6]:
A.
3南

如果要查找连续的nan出现在查找2个以上的位置,可以执行以下操作:

[38]on

:
df=pd.DataFrame({'a':[1,2,np.NaN,np.NaN,np.NaN,6,7,8,9,10,np.NaN,np.NaN,13,14]})
df
Output[38]:
A.
0    1
1    2
2楠
3南
4楠
5    6
6    7
7    8
8    9
9   10
10南
11南
12  13
13  14
At[41]on:
df.a.isnull().astype(int).groupby(df.a.notnull().astype(int).cumsum()).sum()
Output[41]:
A.
1    0
2    3
3    0
4    0
5    0
6    0
7    2
8    0
9    0
名称:a,数据类型:int32

发表评论