Удалите все строки, которые * не * содержат NaNs в своих столбцах - PullRequest
0 голосов
/ 19 февраля 2019

Я использую эту команду для удаления строк, в которых есть одна ячейка со значением NAN:

pos_data = df.iloc[:,[5,6,2]].dropna()

Нет. Я хочу знать, как сохранить строки в NAN и удалить все остальные строки, которые неесть NAN в одной из своих колонок.мои данные - это пандас.

Спасибо.

Ответы [ 2 ]

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

Это должно удалить все строки, которые не имеют по крайней мере 1 нА значение:

df[df.isna().any(axis=1)]
0 голосов
/ 19 февраля 2019

Используйте логическое индексирование, найдите все столбцы, которые имеют по крайней мере один NaN в своих строках, и используйте маску для фильтрации.

df[df.iloc[:, [5, 6, 2]].isna().any(1)]

Эквивалент DeMorgan это:

df[~df.iloc[:, [5, 6, 2]].notna().all(1)]

df = pd.DataFrame({'A': ['x', 'x', np.nan, np.nan], 'B': ['y', np.nan, 'y', 'y'], 'C': list('zzz') + [np.nan]})
df

     A    B    C
0    x    y    z
1    x  NaN    z
2  NaN    y    z
3  NaN    y  NaN

Если мы рассматриваем только столбцы "A" и "C", то наше решение будет выглядеть как

df[['A', 'C']]

     A    C
0    x    z
1    x    z
2  NaN    z
3  NaN  NaN

# Check which cells are NaN
df[['A', 'C']].isna()

       A      C
0  False  False
1  False  False
2   True  False
3   True   True

# Use `any` along the first axis to perform a logical OR across columns
df[['A', 'C']].isna().any(axis=1)

0    False
1    False
2     True
3     True
dtype: bool

# Now, we filter
df[df[['A', 'C']].isna().any(axis=1)]

     A  B    C
2  NaN  y    z
3  NaN  y  NaN

Как уже упоминалось, обратное к этомуиспользует notna + all(axis=1):

df[['A', 'C']].notna().all(1)

0     True
1     True
2    False
3    False
dtype: bool

# You'll notice this is the logical inverse of what we need, 
# so we invert using bitwise NOT `~` operator
~df[['A', 'C']].notna().all(1)

0    False
1    False
2     True
3     True
dtype: bool
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...