Нашли ошибку?
среднийpandas 3.0.6

to_dict и to_numpy

Превратить таблицу в словарь, список записей или массив NumPy — для JSON, обычного Python или библиотек машинного обучения.

Нужно знать:DataFrame

Содержание статьи

Коротко

  • 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}}
Series в словарь
prices["price"].to_dict()
Вывод
{'латте': 180, 'чай': 90}
Массив NumPy
prices.to_numpy()
Вывод
array([[180,  12],
       [ 90,  40]])
Список Python
prices["qty"].tolist()                   # обычные int Python
Вывод
[12, 40]

Подводные камни

Разные типы — массив object

to_numpy для таблицы с текстом
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 и значение для пропусков.

Int64 с пропуском
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])