получить строки фреймов данных со значениями NAN, а не со значениями NAN - PullRequest
0 голосов
/ 18 января 2019

У меня есть фрейм данных df:

   DT   RE   FE   SE C_Step
0  D1   E1   F1   S1   poor
1  D2   E3   F2  NaN    NaN
2  D1   E3  NaN   S2   good
3  D1  NaN   F1   S1   poor
4  D2  NaN   F1   S2   poor
5  D2   E3  NaN   S1   fair
6  D1   E3   F1   S2   fair
7  D2   E2   F1   S1    NaN

Я хочу удалить df1 с без значений NAN в первых четырех столбцах кадра данных df и df2 с значениями NAN в первых четырех столбцах кадра данных df.

желаемый вывод:

df1 =

   DT   RE   FE   SE C_Step
0  D1   E1   F1   S1   poor
1  D1   E3   F1   S2   fair
2  D2   E2   F1   S1    NaN

df2 =

   DT   RE   FE   SE C_Step
0  D2   E3   F2  NaN    NaN
1  D1   E3  NaN   S2   good
2  D1  NaN   F1   S1   poor
3  D2  NaN   F1   S2   poor
4  D2   E3  NaN   S1   fair

Ответы [ 2 ]

0 голосов
/ 19 января 2019

Использование дропна

df1 = df.dropna(subset = ['DT','RE','FE','SE'])
df2 = df.loc[~df.index.isin(df.dropna(subset = ['DT','RE','FE','SE']).index)]

df1

    DT  RE  FE  SE  C_Step
0   D1  E1  F1  S1  poor
6   D1  E3  F1  S2  fair
7   D2  E2  F1  S1  NaN


df2

    DT  RE  FE  SE  C_Step
1   D2  E3  F2  NaN NaN
2   D1  E3  NaN S2  good
3   D1  NaN F1  S1  poor
4   D2  NaN F1  S2  poor
5   D2  E3  NaN S1  fair

Вариант 2: найти строки с нулем

null_idx = df.index.difference(df.dropna(subset = ['DT','RE','FE','SE']).index)
df.iloc[null_idx]
0 голосов
/ 19 января 2019

Создать маску с помощью isnull + any:

m = df.iloc[:, 0:4].isnull().any(1)

df1 = df[~m]
#   DT  RE  FE  SE C_Step
#0  D1  E1  F1  S1   poor
#6  D1  E3  F1  S2   fair
#7  D2  E2  F1  S1    NaN

df2 = df[m]
#   DT   RE   FE   SE C_Step
#1  D2   E3   F2  NaN    NaN
#2  D1   E3  NaN   S2   good
#3  D1  NaN   F1   S1   poor
#4  D2  NaN   F1   S2   poor
#5  D2   E3  NaN   S1   fair
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...