Одна из часто встречающихся задач при работе с данными — это фильтрация. Это актуально и при работе с базами данных, и при работе с данными в Pandas. В частности, часто требуется отфильтровать данные по тому, содержит ли определенная колонка какие-то конкретные значения. В SQL для этого используются операторы IN
и NOT IN
. А как сделать то же самое в Pandas?
Допустим, у нас есть таблица (DataFrame) с именем df
, в которой есть колонка ‘country’, и мы хотим оставить в таблице только те строки, где в колонке ‘country’ стоят значения ‘UK’ или ‘China’. В SQL мы бы написали что-то вроде SELECT * FROM df WHERE country IN ('UK', 'China')
. Как сделать то же самое в Pandas?
В Pandas для этого есть метод isin()
. Вот как можно использовать его на нашем примере:
df = pd.DataFrame({'country': ['US', 'UK', 'Germany', 'China']}) countries_to_keep = ['UK', 'China'] df_filtered = df[df['country'].isin(countries_to_keep)]
Теперь df_filtered
— это таблица, в которой остались только те строки из df
, где в колонке ‘country’ стоит либо ‘UK’, либо ‘China’.
А если мы хотим сделать обратное, то есть оставить только те строки, где в колонке ‘country’ стоят значения, отличные от ‘UK’ и ‘China’? В SQL мы бы написали SELECT * FROM df WHERE country NOT IN ('UK', 'China')
. В Pandas для этого есть метод ~isin()
. Вот как можно использовать его на нашем примере:
df = pd.DataFrame({'country': ['US', 'UK', 'Germany', 'China']}) countries_to_exclude = ['UK', 'China'] df_filtered = df[~df['country'].isin(countries_to_exclude)]
Теперь df_filtered
— это таблица, в которой остались только те строки из df
, где в колонке ‘country’ стоит что-то, отличное от ‘UK’ и ‘China’.
Таким образом, для фильтрации данных в Pandas по значениям определенной колонки можно использовать методы isin()
и ~isin()
, которые аналогичны операторам IN
и NOT IN
в SQL.
Добавить комментарий