1

基本上,我想确定数据集中的缺失值是否连续重复。如果数据集中有无数重复的缺失值,我想知道每个连续重复的缺失值集的长度是否高于某个数字。

例如:

data =['1', '0', '9', '31', '11', '12', 'nan', '10', '44', '53', '12', '66', '99', '3', '2', '6.75833',....., 'nan', 'nan', 'nan', '3', '7', 'nan', 'nan']

data上面,总数'nan'为 6,可以用 来计算data.count('nan')。但是,我想知道的是缺失值可以连续重复多少。对于这个数据,答案是 3。

很抱歉我没有展示我的示例代码,但我在这方面是一个非常新手,我对编码一无所知。

任何想法、帮助或提示将不胜感激。

4

3 回答 3

3

这看起来像是itertools.groupby()的工作:

>>> from itertools import groupby
>>> data =['1', '0', '9', '31', '11', '12', 'nan', '10', '44', '53', 
           '12', '66', '99', '3', '2', '6.75833', 'nan', 'nan', 'nan', 
           '3', '7', 'nan', 'nan']
>>> [len(list(group)) for key, group in groupby(data) if key == 'nan']
[1, 3, 2]

请注意,如果您的代码实际上具有真正的 NaN 而不是字符串,if key == 'nan'则应将相等性测试替换为math.isnan(key).

于 2013-02-08T04:11:43.323 回答
2

或者你可以试试这个更快:

grouped_L = [sum(1 for i in group) for k,group in groupby(L)]
于 2016-04-04T12:26:03.760 回答
0

使用pyrle提高速度。在此解决方案中,我将 nan 替换为不在数据中的数字 (-42)。这是因为 nan 对于 rles 来说是一个困难的值,np.nan != np.nan因此没有 nan 被视为连续的。

import numpy as np

data =['1', '0', '9', '31', '11', '12', 'nan', '10', '44', '53', '12', '66', '99', '3', '2', '6.75833', 'nan', 'nan', 'nan', '3', '7', 'nan', 'nan']
arr = np.array([np.float(f) for f in data])
assert not -42 in arr


from pyrle import Rle

r = Rle(arr)
arr[np.isnan(arr)] = -42
is_nan = r.values == -42
np.max(r.runs[is_nan])
# 3
于 2019-10-29T12:06:26.173 回答