当前位置: 首页 > 面试题库 >

用pandas识别连续的NaN

史绍晖
2023-03-14
问题内容

我正在读取一堆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)

现在要解决的是:它的月度数据,所以如果我连续有两个以上的NaN,我也想丢弃该数据,因为那将意味着我“猜测”了整个季节,甚至更多。

的文档fillna没有真正提到当连续的NaN超过我指定的数量时会发生什么limit=2,但是当我查看RainD.describe()前后...fillna...将其与基本CSV进行比较时,很明显它会填充前两个NaN,然后​​保留保持原样,而不是出错。

因此,长话短说:

如何在不存在一些复杂且耗时的非熊猫循环的情况下,识别出多个连续的带有熊猫的NaN?


问题答案:

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

In [3]:

df = pd.DataFrame({'a':[1,3,np.NaN, np.NaN, 4, np.NaN, 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

如果要查找连续NaNs出现的位置,并且要查找两个以上的位置,可以执行以下操作:

In [38]:

df = pd.DataFrame({'a':[1,2,np.NaN, np.NaN, np.NaN, 6,7,8,9,10,np.NaN,np.NaN,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


 类似资料:
  • 如何使用REST API(带javascript SDK)Bing语音API实现连续语音识别? 使用do Javascript SDK示例:https://github.com/Microsoft/Cognitive-Speech-STT-JavaScript只能用麦克风转录短句

  • 问题内容: 我有这样的df: 如果两个或两个以上连续出现in和a如果没有连续出现,我想在新列中返回a 。因此,在新列中,每一行都将基于该列中满足的此条件获得一个。我想要的输出将是: 我想我可能需要使用,但是我一直在阅读,还没有发现我需要的东西。我希望能够使用此方法来计数任意数量的连续出现,而不仅仅是2。例如,有时我需要计算10次连续出现,在这里的示例中我只使用2次。 问题答案: 你可以: 要得到:

  • 我想在phonegap中创建应用程序,在Android和IOS中使用连续语音识别。我的应用程序应该等待用户的声音,当他/她说“下一步”时,应用程序应该更新屏幕并执行一些操作。 我发现这个插件:https://github.com/macdonst/SpeechRecognitionPlugin而且它工作得非常快。但在语音识别启动几秒钟后,语音识别器停止工作,但并没有语音。是否有任何方法或标志,如i

  • 我有一个实现识别侦听器(RecognitionListener)的活动。要使其连续,每次我再次启动侦听器时: 但是,它需要一些时间(大约半秒钟)才能开始,所以有半秒钟的间隙,没有人在听。因此,我怀念那段时差中所说的话。 另一方面,当我使用谷歌的语音输入时,代替键盘来口述消息——这个时间间隔不存在。意思是——有一个解决方案。 这是什么? 谢谢

  • 问题内容: 我想识别列表中的连续数字组,以便: 返回值: 并且想知道实现此目的的最佳方法是什么(特别是如果Python内置了某些东西)。 编辑:注意,我最初忘记提及个人数字应作为个人数字而不是范围返回。 问题答案: 是在4.0版中添加的。 演示版 应用此工具,我们将生成一个生成器函数来查找连续数字的范围。 所述源执行模拟一个经典配方(由@Nadia Alramli所证明)。 注意:more_ite

  • 我知道“x-webkit-speech”能够进行某种语音识别,实际上识别效果很好。 我发现“x-webkit-语音”有利于开发Q 然而,我正在寻找的是一种在浏览器中执行连续语音识别的方法。例如,如果我在网上听到一个讲座,我想实时转录教授正在谈论的内容。 是否可以使用“x-webkit-speech”?我的感觉是,“x-webkit-speech”在检测到一段很短的静默期时会自动停止,这很烦人。我知