Комплексный словарь SQL для Pandas
Вступление
Что делает SQL таким удивительным, так это то, что его так легко выучить - причина, по которой его так легко выучить, заключается в том, что синтаксис кода настолько интуитивно понятен.
С другой стороны, Pandas не так интуитивно понятен, особенно если вы сначала начали с SQL, как я.
Лично я нашел действительно полезным подумать о том, как я буду манипулировать своими данными в SQL, а затем воспроизвести их в Pandas. Итак, если вы пытаетесь лучше разбираться в пандах, я настоятельно рекомендую вам также воспользоваться этим подходом.
Таким образом, эта статья служит шпаргалкой, словарем, руководством, как бы вы это ни называли, чтобы вы могли ссылаться на это при использовании Pandas.
И с учетом сказанного, давайте погрузимся в это!
Таблица содержания
- Выбор строк
- Объединение таблиц
- Таблицы фильтрации
- Сортировка значений
- Агрегатные функции
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 и поймете основную механику в достаточной степени, и вам не придется полагаться на шпаргалки, подобные этой.
Как всегда, желаю вам всего наилучшего! :)
Не знаете, что читать дальше? Я подобрала для вас другую статью:
Теренс Шин
- Если вам понравилось, подписывайтесь на меня на Medium, чтобы узнать больше
- Подпишитесь на меня на Kaggle, чтобы узнать больше!
- Давайте подключимся к LinkedIn
- Заинтересованы в сотрудничестве? Загляните на мой сайт.