我有数百个时间序列对象,每个对象有100000个条目.缺少一定比例的数据条目(NaN).对我的应用来说,重要的是它们是单个,分散的NaN还是长序列的NaN.
因此,我想要一个函数来给我每个连续NaN序列的游程长度.我可以
myseries.isnull()
Run Code Online (Sandbox Code Playgroud)
得到一系列的布尔.我可以移动中位数或移动平均线来了解数据漏洞的大小.但是,如果有一种有效的方法来获得系列的长度列表,那将是很好的.
也就是说,拥有一个myfunc这样的东西会很好
a = pdSeries([1, 2, 3, np.nan, 4, np.nan, np.nan, np.nan, 5, np.nan, np.nan])
myfunc(a.isnull())
==> Series([1, 3, 2])
Run Code Online (Sandbox Code Playgroud)
(因为分别有1个,3个和2个NaN)
从这一点,我会打洞长度和的直方图and或or的isnull的多个系列(即可能是海誓山盟的替代品),以及其他好东西.
我还想了解其他方法来量化数据漏洞的"结块".
我正在阅读一堆CSV文件(水位随时间变化的测量数据),对它们进行各种分析和可视化.
由于我无法控制的各种原因,这些时间序列通常会丢失数据,所以我做了两件事:
我总计算他们
Rlength=len(RainD) #counts everything, including NaN
Rcount=RainD.count() #counts only valid numbers
NaN_Number=Rlength-Rcount
Run Code Online (Sandbox Code Playgroud)
如果我有比特定阈值更多的缺失数据,则丢弃数据集:
Percent_Data=Rlength/100
Five_Percent=Percent_Data*5
if NaN_Number > Five_Percent:
...
Run Code Online (Sandbox Code Playgroud)
如果NaN的数量足够小,我想填补空白
RainD.level=RainD.level.fillna(method='pad',limit=2)
Run Code Online (Sandbox Code Playgroud)
现在问题是:它的月度数据,所以如果我有超过2个连续NaN,我也想丢弃数据,因为这意味着我"猜测"整个赛季,甚至更多.
在对文件fillna并没有真正提比我更连续NaN的规定时有发生的事情limit=2,但是当我看到RainD.describe()之前和之后...fillna...,它与基本CSV比较,其明确表示,它填补了前2 NaN的,然后离开休息,而不是错误.
所以,长话短说:
如何用熊猫识别一些连续的NaN,没有一些复杂和耗时的非熊猫循环?
我是R的新手,在我的数据框架中我有col1("Timestamp"),col2("Values").我必须在col2中删除超过2个连续NA的行.我的数据框看起来如下,
Timestamp | values
-----------|--------
2011-01-02 | 2
2011-01-03 | 3
2011-01-04 | NA
2011-01-05 | 1
2011-01-06 | NA
2011-01-07 | NA
2011-01-08 | 8
2011-01-09 | 6
2011-01-10 | NA
2011-01-11 | NA
2011-01-12 | NA
2011-01-13 | 2
Run Code Online (Sandbox Code Playgroud)
我想基于第二列删除超过2个重复行.预期产量 -
Timestamp | values
-----------|--------
2011-01-02 | 2
2011-01-03 | 3
2011-01-04 | NA
2011-01-05 | 1
2011-01-06 | NA
2011-01-07 | NA
2011-01-08 | 8
2011-01-09 | 6
2011-01-13 | 2
Run Code Online (Sandbox Code Playgroud)
我提前感谢您寻求解决方案.