Не могу отбросить нулевые значения в Python - PullRequest
0 голосов
/ 23 ноября 2018

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

Сначала я подумал, что это не проблема, поэтому для удаления этих строк я сделал:

df_c = df[df != '-']

Но на самом деле он не отбрасывал строки, вместо него вместо -

ставился NaN. Тогда я сделал:

df_c = df_c[df_c.notnull()]

Но это не работает,и это возвращает меня обратно - снова.Что я не так делаю?

1 Ответ

0 голосов
/ 23 ноября 2018

mask + dropna

Можно маскировать с помощью логического кадра данных, затем использовать dropna:

df = pd.DataFrame({'A': [1, '-', '-', 4, '-'],
                   'B': ['A', 'B', '-', 'C', '-'],
                   'C': [0.5, '-', '-', 1.5, 2.5]})

df = df.mask(df == '-').dropna()

print(df)

   A  B    C
0  1  A  0.5
3  4  C  1.5

По умолчанию dropna удаляет строки (axis=0), где любое значение равно нулю (how='any').Вы можете изменить эти параметры соответствующим образом.

Примечание: Функционально идентично df = df[df != '-'].dropna().Хотя, с косметической точки зрения, намерение из mask может показаться более ясным.


Проблема с вашим решением - df_c.notnull() дает логическое значение dataframe массив, но вы хотите индексировать через одномерный массив / серию.Вы могли бы использовать:

df_c = df[df != '-']
df_c = df_c[df_c.notnull().all(1)]

Но это многословно и, вероятно, неэффективно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...