Series и DataFrame: создание, index, columns, shape, dtypes
Содержание курса
В NumPy мы работали с ndarray — однородным массивом, у которого есть shape и dtype, но нет именованных осей. pandas строится поверх этой идеи и добавляет ключевое: каждая строка и каждый столбец получают метку. Начнём с самого простого объекта — Series.
Создание Series: из списка и из словаря
Series — это одномерный объект pandas: последовательность значений, у каждого из которых есть метка. Метки хранятся в атрибуте index, значения — в values.
Из списка. Когда передаёшь список, pandas сам генерирует целочисленный индекс начиная с 0:
import pandas as pd
s = pd.Series([10, 20, 30])
print(s)
# 0 10
# 1 20
# 2 30
# dtype: int64
print(s.index) # RangeIndex(start=0, stop=3, step=1)
print(s.values) # array([10, 20, 30])
RangeIndex — это не просто список чисел, а ленивый объект, аналогичный range. Pandas не хранит все метки явно в памяти, пока они стандартные целые числа от 0 до n.
Из словаря. Когда передаёшь словарь, ключи становятся метками index, значения — данными:
s2 = pd.Series({'x': 10, 'y': 20, 'z': 30})
print(s2)
# x 10
# y 20
# z 30
# dtype: int64
print(list(s2.index)) # ['x', 'y', 'z']
print(list(s2.values)) # [10, 20, 30]
Порядок меток соответствует порядку ключей в словаре — в Python 3.7+ словари упорядочены, поэтому результат предсказуем.
В обоих случаях структура одна и та же: массив значений плюс набор меток. Разница только в том, кто назначает метки — pandas автоматически или ты явно через ключи словаря. Именно эти метки и называются label; как они соотносятся с порядковыми номерами — разберём отдельно.
