В поисках NaN забастовки - PullRequest
       7

В поисках NaN забастовки

1 голос
/ 01 апреля 2020

У меня есть Dataframe, в котором некоторые столбцы содержат неверную информацию. Эта неверная информация всегда перед более длинной последовательностью значений 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 Ответ

1 голос
/ 02 апреля 2020

Для каждого столбца проверьте, что i-й элемент и (i + 1) -й элемент равны NaN, и найдите максимальный индекс (i), удовлетворяющий i-ому элементу, а (i + 1) -й элемент равен 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
...