Часто возникает необходимость удалить определенные строки из DataFrame в Pandas на основе определенных условий. Например, представим, что у нас есть DataFrame, и мы хотим удалить строки, в которых длина строки в определенном столбце превышает 2.
import pandas as pd data = {'column1': ['abc', 'def', 'ghi', 'jkl'], 'column2': ['mno', 'pqr', 'stu', 'vwx'], 'column3': ['yz', 'ab', 'cd', 'ef']} df = pd.DataFrame(data)
В этом DataFrame мы хотим удалить строки из column1
, где длина строки больше 2. В первую очередь, кажется логичным использовать следующий код для достижения этой цели:
df[(len(df['column1']) < 2)]
Однако, выполнение этого кода приведет к ошибке KeyError: 'no item named False'
.
Почему возникает ошибка?
Ошибка происходит потому, что len(df['column1'])
возвращает количество строк в столбце, а не длину каждой отдельной строки в столбце. Поэтому, условное выражение (len(df['column1']) < 2)
возвращает либо True
, либо False
, вместо серии булевых значений.
Как правильно удалять строки на основе условного выражения?
Для удаления строк из DataFrame на основе условного выражения нужно использовать метод apply()
вместе с лямбда-функцией. Вот как это можно сделать:
df = df[df['column1'].apply(lambda x: len(x) <= 2)]
В этом коде lambda x: len(x) <= 2
— это функция, которая применяется к каждому элементу в column1
. Если длина строки в column1
меньше или равна 2, то выражение возвращает True
, в противном случае возвращает False
. Таким образом, мы получаем серию булевых значений, которую можно использовать для фильтрации DataFrame.
После выполнения этого кода, DataFrame будет содержать только те строки, в которых длина строки в column1
меньше или равна 2.
Добавить комментарий