Как удалить строки из фрейма данных pandas, содержащего определенную строку в определенном столбце?
У меня есть очень большой фрейм данных в python, и я хочу удалить все строки, которые имеют определенную строку внутри определенного столбца.
Например, я хочу удалить все строки, которые имеют строку " XYZ " в качестве подстроки в столбце C фрейма данных.
Может ли это быть реализовано эффективным способом с помощью .метод drop ()?
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))]
new_df = df[df.C != 'XYZ']Ссылка: https://chrisalbon.com/python/data_wrangling/pandas_dropping_column_and_rows/
Приведенный ниже код даст вам список всех строк: -
df[df['C'] != 'XYZ']Для хранения значений из приведенного выше кода в фрейм данных : -
newdf = df[df['C'] != 'XYZ']
Comments