Коротко
to_dict()по умолчанию —{столбец: {метка: значение}}. Другие формы задаётorient:"list","records","index".to_dict("records")— список словарей по строкам; это самый частый формат для JSON и API.to_numpy()— массив NumPy. У разнотипных столбцов общий типobject— медленный и неудобный.tolist()— список значений Series в обычных типах Python.- Вместо
.valuesиспользуйтеto_numpy(): у него понятное поведение и параметрыdtype,na_value.
Синтаксис
df.to_dict(orient="dict") # "list", "records", "index", "split", "tight"
s.to_dict()
df.to_numpy(dtype=None, na_value=<пропуск>)
s.tolist()Параметры
ПараметрЧто делаетПо умолчанию
orientформа словаря: "dict", "list", "records", "index", "split", "tight""dict"dtypeв to_numpy: тип результатапо даннымna_valueв to_numpy: чем заменить пропускипо типу| orient | Результат |
|---|---|
"dict" |
{столбец: {метка: значение}} |
"list" |
{столбец: [значения]} |
"records" |
[{столбец: значение}, …] |
"index" |
{метка: {столбец: значение}} |
Примеры
prices = pd.DataFrame(
{"price": [180, 90], "qty": [12, 40]},
index=["латте", "чай"],
)prices.to_dict() # {столбец: {метка: значение}}Вывод
{'price': {'латте': 180, 'чай': 90}, 'qty': {'латте': 12, 'чай': 40}}print(prices.to_dict("list")) # {столбец: [значения]}
print(prices.to_dict("records")) # [{столбец: значение}, ...] — по строкам
prices.to_dict("index") # {метка: {столбец: значение}}Вывод
{'price': [180, 90], 'qty': [12, 40]}
[{'price': 180, 'qty': 12}, {'price': 90, 'qty': 40}]
{'латте': {'price': 180, 'qty': 12}, 'чай': {'price': 90, 'qty': 40}}prices["price"].to_dict()Вывод
{'латте': 180, 'чай': 90}prices.to_numpy()Вывод
array([[180, 12],
[ 90, 40]])prices["qty"].tolist() # обычные int PythonВывод
[12, 40]
Подводные камни
Разные типы — массив object
mixed = prices.reset_index() # появился текстовый столбец
mixed.to_numpy() # общий тип — objectВывод
array([['латте', 180, 12],
['чай', 90, 40]], dtype=object)Выберите сначала числовые столбцы: df.select_dtypes("number").to_numpy().
Пропуски в nullable-типах
В столбце Int64 пропуск — это pd.NA. В массиве NumPy у целых пропусков нет, поэтому to_numpy возвращает float с NaN. Если нужны целые, укажите dtype и значение для пропусков.
counts = pd.Series([3, None, 5], dtype="Int64")
print(counts.to_numpy()) # с пропуском целые стали float
counts.to_numpy(dtype="int64", na_value=0) # целые, пропуск → 0Вывод
[ 3. nan 5.] array([3, 0, 5])