Сравнение с SQL
Поскольку многие потенциальные пользователи pandas знакомы с SQL, эта страница предназначена для предоставления примеров того, как различные операции SQL выполняются с помощью pandas.
Если вы новичок в pandas, возможно, вам сначала следует ознакомиться с 10 минут с pandas, чтобы познакомиться с библиотекой.
Как обычно, мы импортируем pandas и NumPy следующим образом:
In [1]: import pandas as pd In [2]: import numpy as np
Большинство примеров будут использовать набор данных tips, который находится в тестах pandas. Мы прочитаем данные в DataFrame под названием tips и предположим, что у нас есть таблица базы данных с таким же именем и структурой.
In [3]: url = ('https://raw.github.com/pandas-dev'
...: '/pandas/master/pandas/tests/data/tips.csv')
...:
In [4]: tips = pd.read_csv(url)
In [5]: tips.head()
Out[5]:
total_bill tip sex smoker day time size
0 16.99 1.01 Female No Sun Dinner 2
1 10.34 1.66 Male No Sun Dinner 3
2 21.01 3.50 Male No Sun Dinner 3
3 23.68 3.31 Male No Sun Dinner 2
4 24.59 3.61 Female No Sun Dinner 4
SELECT
В SQL выбор осуществляется с помощью списка столбцов, разделенных запятыми, которые вы хотите выбрать (или * для выбора всех столбцов):
SELECT total_bill, tip, smoker, time FROM tips LIMIT 5;
В pandas выбор столбцов выполняется путем передачи списка имен столбцов в DataFrame:
In [6]: tips[['total_bill', 'tip', 'smoker', 'time']].head(5) Out[6]: total_bill tip smoker time 0 16.99 1.01 No Dinner 1 10.34 1.66 No Dinner 2 21.01 3.50 No Dinner 3 23.68 3.31 No Dinner 4 24.59 3.61 No Dinner
Вызов DataFrame без списка имен столбцов отобразит все столбцы (аналогично SQL's *).
WHERE
Фильтрация в SQL выполняется с помощью оператора WHERE.
SELECT * FROM tips WHERE time = 'Dinner' LIMIT 5;
DataFrame можно фильтровать несколькими способами; наиболее интуитивный из них — использование булевых индексов.
In [7]: tips[tips['time'] == 'Dinner'].head(5) Out[7]: total_bill tip sex smoker day time size 0 16.99 1.01 Female No Sun Dinner 2 1 10.34 1.66 Male No Sun Dinner 3 2 21.01 3.50 Male No Sun Dinner 3 3 23.68 3.31 Male No Sun Dinner 2 4 24.59 3.61 Female No Sun Dinner 4
Вышеупомянутое утверждение просто передает Series объектов True/False в DataFrame, возвращая все строки с True.
In [8]: is_dinner = tips['time'] == 'Dinner' In [9]: is_dinner.value_counts() Out[9]: True 176 False 68 Name: time, dtype: int64 In [10]: tips[is_dinner].head(5)
© 2008–2012, AQR Capital Management, LLC, Lambda Foundry, Inc. and PyData Development Team
Licensed under the 3-clause BSD License.
https://pandas.pydata.org/pandas-docs/version/0.24.2/getting_started/comparison/comparison_with_sql.html