Pandas: удаление строк, в которых ни одно из столбцов не заполнено - PullRequest
1 голос
/ 25 февраля 2020

У меня есть следующий фрейм данных:

Name Age Tag1 Tag2 Tag3 Tag4 Tag5
A    10   1    2    3    55   6
B    23   4    0    5    0    9
C    19   2    0    0    0    0
D    30   0    0    0    0    0
E    44   0    0    0    4    0

С вышеупомянутого фрейма данных я хочу удалить те строки, которые не имеют записей в столбцах Tag1 до Tag5. В этом примере это будет строка D

Есть ли чистый способ сделать это на очень большом фрейме данных?

Я пробовал это, но не знаю, это правильный подход как я должен использовать условие ИЛИ здесь. Если значение присутствует в любом из столбцов, он не должен удалять эту строку.

result_fin[result_fin['Tag1', 'Tag2', 'Tag3', 'Tag4', 'Tag5'] > 0]

Ответы [ 2 ]

1 голос
/ 25 февраля 2020

Вы можете заменить 0 на np.nan и использовать dropna для удаления соответствующих строк

df = df.replace({0:np.nan}).dropna(subset=["tag1","tag2","tag3","tag4","tag5"], 
                                   how="all").fillna(0)
1 голос
/ 25 февраля 2020

Попробуйте df.any(1)

>>> df[(df[df.columns[2:]]).any(1)]
  Name  Age  Tag1  Tag2  Tag3  Tag4  Tag5
0    A   10     1     2     3    55     6
1    B   23     4     0     5     0     9
2    C   19     2     0     0     0     0
4    E   44     0     0     0     4     0

Или, наоборот, df.all(1)

>>> df[~(df[df.columns[2:]]==0).all(1)]
  Name  Age  Tag1  Tag2  Tag3  Tag4  Tag5
0    A   10     1     2     3    55     6
1    B   23     4     0     5     0     9
2    C   19     2     0     0     0     0
4    E   44     0     0     0     4     0

(1) предлагает вам хотите просмотреть axis 1

Вместо df.columns[2:] вы также можете указать имена столбцов ['Tag1', 'Tag2', 'Tag3', 'Tag4', 'Tag5'].

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