Подтвердить что ты не робот

Как удалить строки из фрейма данных pandas, который содержит определенную строку в определенном столбце?

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

Например, я хочу удалить все строки, которые имеют строку "XYZ" в качестве подстроки в столбце C фрейма данных.

Может ли это быть эффективно реализовано с использованием метода .drop()?

4b9b3361

Ответ 1

pandas имеет векторизованные строковые операции, поэтому вы можете просто отфильтровать строки, содержащие строку, которую вы не хотите:

In [91]: df = pd.DataFrame(dict(A=[5,3,5,6], C=["foo","bar","fooXYZbar", "bat"]))

In [92]: df
Out[92]:
   A          C
0  5        foo
1  3        bar
2  5  fooXYZbar
3  6        bat

In [93]: df[~df.C.str.contains("XYZ")]
Out[93]:
   A    C
0  5  foo
1  3  bar
3  6  bat

Ответ 2

Если ваше строковое ограничение не является только одной строкой, вы можете отбросить соответствующие строки:

df = df[~df['your column'].isin(['list of strings'])]

Вышеупомянутое приведет к удалению всех строк, содержащих элементы вашего списка

Ответ 3

Это будет работать, только если вы хотите сравнить точные строки. Он не будет работать, если вы хотите проверить, содержит ли строка столбца какую-либо из строк в списке. Правильный способ сравнения со списком:

   searchfor = ['john', 'doe']
   df = df[~df.col.str.contains('|'.join(searchfor))]

Ответ 5

если вы не хотите удалять все NaN, используйте

df[~df.C.str.contains("XYZ") == True]

Ответ 6

В приведенном ниже коде вам будет представлен список всех строк:

df[df['C'] != 'XYZ']

Чтобы сохранить значения из приведенного выше кода в фреймворк данных: -

newdf = df[df['C'] != 'XYZ']

Ответ 7

Небольшая модификация кода. Если na = False будет пропускать пустые значения. В противном случае вы можете получить ошибку TypeError: неправильный тип операнда для унарного ~: float

df[~df.C.str.contains("XYZ", na=False)]

Источник: TypeError: неправильный тип операнда для унарного ~: float