【问题标题】:Searching for a NaN strike搜索 NaN 罢工
【发布时间】:2020-07-13 00:51:54
【问题描述】:

我有一个数据框,其中某些列包含错误信息。这个错误信息总是出现在较长的 NaN 值序列之前。假设我有以下数据集:

import pandas as pd 
from numpy import nan

d = {'Obs1': [1, 2, 3, 4, 5, 6, 7, 8], 'Obs2': [0.1, 0.1, nan, nan, nan, nan, 100, 101]}
df = pd.DataFrame(data=d)

“Obs1”没有错误信息,而“Obs2”在4-NaN序列之前有错误值。有谁知道如何在时间序列中找到如此长的序列(例如出现 4 个 NaN 值),然后用 NaN 填充所有先前的条目?举个例子,我想要的输出是:

Output = {'Obs1': [1, 2, 3, 4, 5, 6, 7, 8], 'Obs2': [nan, nan, nan, nan, nan, nan, 100, 101]}

提前致谢

【问题讨论】:

  • 1) 你所说的“罢工”是什么意思? 2)您能否提供一个您需要的输出示例?

标签: python nan


【解决方案1】:

对于每一列,检查第 i 个元素和第 (i+1) 个元素是否为 NaN,并找到满足第 i 个元素和第 (i+1) 个元素的最大索引 (i) 为 NaN。

请看下面的代码。

for col in df.columns:
    cond = df[col].iloc[1:].isnull() + df[col].iloc[:-1].isnull() == 2
    if sum(cond) >= 2:    
        df[col].iloc[:cond.index[-1] - 1] = nan

【讨论】:

  • 感谢您的回答。如果我正在搜索 2 个和更多 nan 之间的序列,这很有效,但是如果我想专门搜索,例如20 nan一个接一个?
  • 然后将“if sum(cond) >= 2”改为“if sum(cond) >= 20”
猜你喜欢
  • 2016-09-16
  • 2017-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多