Как получить индексы значений NaN в DataFrame и после заполнения снова установить значение NaN? - PullRequest
0 голосов
/ 01 августа 2020
Time                           A            B           C             D              E           F           G         H            I              K                                                                                                 
2019-06-17 08:45:00     12089.89     12089.89    12087.71      12087.71       0.026626    2495.595    2495.595   2486.095     2488.095      0.000705
2019-06-17 08:46:00     12087.91          NaN    12087.71      12087.91       0.023684    2489.095    2490.095   2486.095     2486.095      0.000613
2019-06-17 08:47:00     12088.21     12088.21    12084.21      12085.21       0.028582    2487.095    2487.595   2485.095     2486.095      0.000516
2019-06-17 08:48:00     12085.09     12090.21    12084.91      12089.41       0.033238    2485.095    2485.595   2485.095     2485.095      0.000108
2019-06-17 08:49:00     12089.71     12090.21    12087.21      12088.21       0.033204    2484.095    2484.095   2484.095     2484.095      0.000010
                         ...          ...         ...           ...            ...         ...         ...        ...          ...           ...
2019-07-08 23:03:00     12504.11     12504.11    12504.11      12504.11       0.000734         NaN         NaN        NaN          NaN           NaN
2019-07-08 23:04:00     12504.11          NaN    12503.11      12503.11       0.002394         NaN         NaN        NaN          NaN           NaN
2019-07-08 23:08:00     12504.11     12504.11    12503.11      12503.11       0.002294         NaN         NaN        NaN          NaN           NaN
2019-07-08 23:09:00     12503.61     12503.61    12503.61      12503.61       0.000734         NaN         NaN        NaN          NaN           NaN
2019-07-08 23:10:00     12503.61     12503.61    12503.11      12503.11       0.002294         NaN         NaN        NaN          NaN           NaN

В таком фрейме данных: как получить расположение всех строк, содержащих NaN? (где НЕ вся строка равна NaN, но хотя бы одно NaN) После этого они очищаются .ffill (), но позже мне нужно снова установить эти c индексы NaN.

#1. select the df without the columns that are Full-NaN
df2 = df.dropna(how='All')

#2. select the indices of the still NaN containing rows.
indices = ???

#3. filling
df2.fillna(method="ffill")

#4. irrelevant manipulation and extraction stuff
#...

#5. set the NaNs back to where they were.
# df[indices] = ...

Ответы [ 2 ]

0 голосов
/ 01 августа 2020
import pandas as pd
from numpy import nan

data = {'Name': ['Tom', 'nick', 'krish', 'jack'], 'Age': [nan, 21, nan, 18]}
df = pd.DataFrame(data)
print(df)
print("================")
is_NaN = df.isnull()
rows_have_NaN = is_NaN.any(axis=1)
print(df[rows_have_NaN])

вывод:

   Name   Age
0    Tom   NaN
1   nick  21.0
2  krish   NaN
3   jack  18.0
================
    Name  Age
0    Tom  NaN
2  krish  NaN
0 голосов
/ 01 августа 2020

Попробуйте:

indices = df.loc[df.isnull().any(axis=1)].index

Пример фрейма данных:

df:

    a   b   c   d
0   NaN 1   2   NaN
1   1.0 2   3   4.0
2   NaN 1   2   3.0
3   1.0 2   3   NaN
4   1.0 4   5   6.0

индексы:

Int64Index([0, 2, 3], dtype='int64')

df.loc [индексы]:

    a   b   c   d
0   NaN 1   2   NaN
2   NaN 1   2   3.0
3   1.0 2   3   NaN
...