Коротко
- Series — одномерный массив значений с индексом (метками строк).
- DataFrame — таблица: набор столбцов-Series с общим индексом. У каждого столбца свой тип.
- Операции применяются к целому столбцу сразу, как в NumPy:
df["a"] * 2. - Принято импортировать так:
import pandas as pd. Во всех примерах справочникаpdиnpуже импортированы. - Примеры в стиле Jupyter: под кодом — вывод
printи значение последней строки. В.py-файле оберните последнюю строку вprint().
Главное о pandas 3
Справочник написан для pandas 3.0. Если код из интернета ведёт себя иначе, скорее всего, дело в одном из этих изменений:
- строки по умолчанию хранятся в типе
str, а неobject— строки; - любая выборка ведёт себя как копия (Copy-on-Write), цепочечное присваивание не работает — Copy-on-Write;
- даты из строк получают разрешение в микросекундах, а не наносекундах — даты;
- удалены
applymap,fillna(method=…), частотыM,Q,Yи другие устаревшие API — отмечены в статьях.
Синтаксис
import pandas as pd
s = pd.Series([1, 2, 3], index=["a", "b", "c"])
df = pd.DataFrame({"имя_столбца": [значения], ...})
df["столбец"] # столбец — это Series
pd.__version__Примеры
sales = pd.DataFrame({
"city": ["Омск", "Тула", "Сочи"],
"cups": [120, 85, 240],
"price": [180.0, 165.0, 210.0],
})temps = pd.Series([12.5, 9.0, 21.3], index=["Омск", "Тула", "Сочи"])
tempsВывод
Омск 12.5 Тула 9.0 Сочи 21.3 dtype: float64
salesВывод
city cups price 0 Омск 120 180.0 1 Тула 85 165.0 2 Сочи 240 210.0
col = sales["cups"]
print(type(col))
colВывод
<class 'pandas.Series'> 0 120 1 85 2 240 Name: cups, dtype: int64
sales["revenue"] = sales["cups"] * sales["price"] # столбец целиком, без цикла
salesВывод
city cups price revenue 0 Омск 120 180.0 21600.0 1 Тула 85 165.0 14025.0 2 Сочи 240 210.0 50400.0
pd.__version__Вывод
'3.0.6'
Подводные камни
Тип строк изменился
names = pd.Series(["Аня", "Борис"])
print(names.dtype)
names.dtype == object # старая проверка «строковый ли столбец» больше не работаетВывод
str False
Цикл по строкам вместо операции над столбцом
pandas построен на NumPy: операции над столбцами выполняются быстро, а цикл Python по строкам — в десятки раз медленнее. См. почему iterrows медленный.
sales["cups"].to_numpy() # данные столбца — массив NumPyВывод
array([120, 85, 240])