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



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

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

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

235   6  

6 ответов:

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") == False]
Out[93]:
   A    C
0  5  foo
1  3  bar
3  6  bat

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

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

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

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

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

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

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

Приведенный ниже код даст вам список всех строк: -

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

Для хранения значений из приведенного выше кода в фрейм данных : -

newdf = df[df['C'] != 'XYZ']
    Ничего не найдено.

Добавить ответ:
Отменить.