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 所以,长话短说: 如何用熊猫识别一些连续的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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |