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