Комплексный словарь SQL для Pandas

Вступление

Что делает SQL таким удивительным, так это то, что его так легко выучить - причина, по которой его так легко выучить, заключается в том, что синтаксис кода настолько интуитивно понятен.

С другой стороны, Pandas не так интуитивно понятен, особенно если вы сначала начали с SQL, как я.

Лично я нашел действительно полезным подумать о том, как я буду манипулировать своими данными в SQL, а затем воспроизвести их в Pandas. Итак, если вы пытаетесь лучше разбираться в пандах, я настоятельно рекомендую вам также воспользоваться этим подходом.

Таким образом, эта статья служит шпаргалкой, словарем, руководством, как бы вы это ни называли, чтобы вы могли ссылаться на это при использовании Pandas.

И с учетом сказанного, давайте погрузимся в это!

Таблица содержания

  1. Выбор строк
  2. Объединение таблиц
  3. Таблицы фильтрации
  4. Сортировка значений
  5. Агрегатные функции

1. Выбор строк

ВЫБРАТЬ ИЗ

Если вы хотите выделить всю таблицу, просто вызовите имя таблицы:

# SQL
SELECT * FROM table_df
# Pandas
table_df

ВЫБЕРИТЕ a, b ИЗ

Если вы хотите выбрать определенные столбцы из таблицы, укажите нужные столбцы в двойных скобках:

# SQL
SELECT column_a, column_b FROM table_df
# Pandas
table_df[['column_a', 'column_b']]

ВЫБРАТЬ ОТЛИЧИТЕЛЬНЫЙ

Просто используйте .drop_duplicates () для получения различных значений:

# SQL
SELECT DISTINCT column_a FROM table_df
# Pandas
table_df['column_a'].drop_duplicates()

ВЫБЕРИТЕ a как b

Если вы хотите переименовать столбец, используйте .rename ():

# SQL
SELECT column_a as Apple, column_b as Banana FROM table_df
# Pandas
table_df[['column_a', 'column_b']].rename(columns={'column_a':
'Apple', 'column_b':'Banana'})

ВЫБЕРИТЕ СЛУЧАЙ, КОГДА

Для эквивалента SELECT CASE WHEN вы можете использовать np.select (), где вы сначала указываете свой выбор и значения для каждого варианта.

Если вы хотите включить несколько условий на выбор, прочтите эту статью.

# SQL
SELECT CASE WHEN column_a > 30 THEN "Large"
            WHEN column_a <= 30 THEN "Small"
            END AS Size
FROM table_df
# Pandas
conditions = [table_df['column_a']>30, table_df['column_b']<=30]
choices = ['Large', 'Small']
table_df['Size'] = np.select(conditions, choices)

2. Объединение таблиц

ВНУТРЕННЕЕ / ЛЕВОЕ / ПРАВЫЕ СОЕДИНЕНИЕ

Просто используйте .merge () для объединения таблиц. Вы можете указать, хотите ли вы, чтобы это было ЛЕВОЕ, ПРАВО, ВНУТРЕННЕЕ или ВНЕШНЕЕ соединение, используя параметр как.

# SQL
SELECT * FROM table_1 t1
         LEFT JOIN table_2 t1 on t1.lkey = t2.rkey 
# Pandas
table_1.merge(table_2, left_on='lkey', right_on='rkey', how='left')

СОЮЗ ВСЕ

Просто используйте pd.concat ():

# SQL
SELECT * FROM table_1
UNION ALL
SELECT * FROM table_2
# Pandas
final_table = pd.concat([table_1, table_2])

3. Таблицы фильтрации

ВЫБЕРИТЕ ГДЕ

При фильтрации DataFrame так же, как при использовании предложения WHERE в SQL, вам просто нужно определить критерии в квадратных скобках:

# SQL
SELECT * FROM table_df WHERE column_a = 1
# Pandas
table_df[table_df['column_a'] == 1]

ВЫБРАТЬ column_a ГДЕ column_b

Если вы хотите выбрать определенный столбец в таблице и отфильтровать его с помощью другого столбца, следуйте приведенному ниже формату (если вы хотите узнать о нем больше, ознакомьтесь с этой ссылкой):

# SQL
SELECT column_a FROM table_df WHERE column_b = 1
# Pandas
table_df[table_df['column_b']==1]['column_a']

ВЫБЕРИТЕ ГДЕ И

Если вы хотите фильтровать по нескольким критериям, просто заключите каждое условие в круглые скобки и разделите каждое условие с помощью &. Чтобы увидеть больше вариантов, посетите эту ссылку.

# SQL
SELECT * FROM table_df WHERE column_a = 1 AND column_b = 2
# Pandas
table_df[(table_df['column_a']==1) & (table_df['column_b']==2)]

ВЫБЕРИТЕ ГДЕ НРАВИТСЯ

Эквивалент LIKE в SQL - .str.contains (). Если вы хотите применить нечувствительность к регистру, просто добавьте в параметры case = False (см. Здесь).

# SQL
SELECT * FROM table_df WHERE column_a LIKE '%ball%'
# Pandas
table_df[table_df['column_a'].str.contains('ball')]

ВЫБЕРИТЕ ГДЕ столбец В ()

Эквивалент IN () в SQL - .isin ().

# SQL
SELECT * FROM table_df WHERE column_a IN('Canada', 'USA')
# Pandas
table_df[table_df['column_a'].isin(['Canada', 'USA'])]

4. Сортировка значений

ЗАКАЗАТЬ по одному столбцу

Эквивалент ORDER BY в SQL - .sort_values ​​(). Используйте параметр ascending, чтобы указать, хотите ли вы отсортировать значения в порядке возрастания или убывания - по умолчанию используется возрастание, как в SQL.

# SQL
SELECT * FROM table_df ORDER BY column_a DESC
# Pandas
table_df.sort_values('column_a', ascending=False)

ЗАКАЗАТЬ по нескольким столбцам

Если вы хотите ЗАКАЗАТЬ несколько столбцов, укажите столбцы в скобках и укажите направление упорядочения в параметре «по возрастанию» в скобках. Убедитесь, что вы следуете соответствующему порядку перечисленных столбцов.

# SQL
SELECT * FROM table_df ORDER BY column_a DESC, column_b ASC
# Pandas
table_df.sort_values(['column_a', 'column_b'], ascending=[False, True])

5. Агрегатные функции

COUNT DISTINCT

Вы заметите общий шаблон для агрегатных функций.

Чтобы воспроизвести COUNT DISTINCT, просто используйте .groupby () и .nunique (). См. Здесь для получения дополнительной информации:

# SQL
SELECT column_a, COUNT DISTINCT(ID) 
FROM table_df
GROUP BY column_a
# Pandas
table_df.groupby('column_a')['ID'].nunique()

СУММ

# SQL
SELECT column_a, SUM(revenue) 
FROM table_df
GROUP BY column_a 
# Pandas
table_df.groupby(['column_a', 'revenue']).sum()

СРЕДНЕЕ

# SQL
SELECT column_a, AVG(revenue) 
FROM table_df
GROUP BY column_a
# Pandas
table_df.groupby('column_a')['revenue'].mean()

Спасибо за прочтение!

Надеюсь, это послужит полезным руководством при работе с данными с помощью Pandas. Не думайте, что вам тоже нужно все это запоминать! Это то, к чему я постоянно возвращаюсь, когда работаю с Pandas.

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

Как всегда, желаю вам всего наилучшего! :)

Не знаете, что читать дальше? Я подобрала для вас другую статью:



Теренс Шин