我正在阅读大量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