Исключить все строки со значениями более 100, кроме одного столбца

Я работаю с открытым набором данных о еде, который очень беспорядочный. В нем много столбцов с количеством (в граммах) некоторых соответствующих ингредиентов (например, сахара) на 100 г. Согласно обзору (.describe ()) максимальное значение для большей части столбца превышает 100, что, очевидно, невозможно. Это верно за исключением столбца энергии, поскольку энергия не измеряется в граммах.

Минимум для большинства столбцов также иногда бывает отрицательным. Однако это было просто исправить с помощью: data = data[data >= 0].

Я хочу знать, как я могу сделать то же самое в отношении удаления всех строк с записями более 100, кроме столбца энергии.

Я пробовал вот это: data = data[data.drop(columns=['energy_100g']) <= 100]

Но также удалены все записи в столбце энергии.

Может ли кто-нибудь мне помочь?

Я был бы очень признателен!

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

harvpan 10.08.2018 16:18
1
1
76
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Предположим, вы хотите удалить строки, в которых столбец любой, за исключением energy_100g, имеет значение> 100. В этом случае вы можете использовать pd.DataFrame.any для создания логической маски:

data = data[~(data[data.columns.difference(['energy_100g'])] > 100).any(1)]

Точно так же вы можете использовать all без отрицания и обратного сравнения:

data = data[(data[data.columns.difference(['energy_100g'])] <= 100).all(1)]

В каждом случае мы используем pd.Index.difference, чтобы исключить указанный столбец для наших сравнений.

Другие вопросы по теме