Преобразовать DataFrame в массив объектов - PullRequest
0 голосов
/ 05 февраля 2019

Есть ли способ преобразовать Pandas DataFrame в массив объектов (что-то более удобное для работы в JavaScript)?

Я использую Facebook Prophet для запуска прогноза временных рядов и возвратаданные обратно клиенту, чтобы что-то сделать с ним.

Я, по сути, хочу взять DataFrame, как это:

enter image description here

Но, верните что-то вроде этого:

[
    {
        'ds': <value>,
        'trend': <value>,
        'yhat_lower': <value>,
        'yhat_upper': <value>
        ...
    },
    {
        'ds': <value>,
        'trend': <value>,
        'yhat_lower': <value>,
        'yhat_upper': <value>
        ...
    },
    ...
]

Я пробовал DataFrame.to_json(), что довольно близко к тому, что мне нужно, но это создает другие проблемы.Я также попробовал DataFrame.to_dict(), и это не совсем то, чего я хочу.Та же самая история для DataFrame.to_records()

Мне действительно нужно циклически перебирать DataFrame вручную, чтобы составить список, как я хочу, или есть какой-то параметр / метод, который мне не хватает при получении DataFrame для форматированиякак массив объектов с именами столбцов в качестве ключа объекта?

ОБНОВЛЕНИЕ

.to_dict() близко к тому, что я хочу, но все еще есть вложенный объект.Есть ли способ избавиться от этого?

{'additive_terms': {0: 1821.6658106578184},
 'additive_terms_lower': {0: 1821.6658106578184},
 'additive_terms_upper': {0: 1821.6658106578184},
 'daily': {0: -904.5939055630084},
 'daily_lower': {0: -904.5939055630084},
 'daily_upper': {0: -904.5939055630084},
 'ds': {0: Timestamp('2016-01-01 00:00:00')},
 'multiplicative_terms': {0: 0.0},
 'multiplicative_terms_lower': {0: 0.0},
 'multiplicative_terms_upper': {0: 0.0},
 'trend': {0: 3959.7525337335633},
 'trend_lower': {0: 3959.7525337335633},
 'trend_upper': {0: 3959.7525337335633},
 'weekly': {0: 1382.1213748832024},
 'weekly_lower': {0: 1382.1213748832024},
 'weekly_upper': {0: 1382.1213748832024},
 'yearly': {0: 1344.1383413376243},
 'yearly_lower': {0: 1344.1383413376243},
 'yearly_upper': {0: 1344.1383413376243},
 'yhat': {0: 5781.418344391382},
 'yhat_lower': {0: -4262.772973874018},
 'yhat_upper': {0: 15333.709906373766}}

ОБНОВЛЕНИЕ 2

Похоже, ответ @ busybear - это то, что я хочу, однако я хочу егомассив объектов вместо большого объекта, использующий индекс в качестве ключа к отдельной записи:

{0: {'additive_terms': 1821.6658106578184,
  'additive_terms_lower': 1821.6658106578184,
  'additive_terms_upper': 1821.6658106578184,
  'daily': -904.5939055630084,
  'daily_lower': -904.5939055630084,
  'daily_upper': -904.5939055630084,
  'ds': Timestamp('2016-01-01 00:00:00'),
  'multiplicative_terms': 0.0,
  'multiplicative_terms_lower': 0.0,
  'multiplicative_terms_upper': 0.0,
  'trend': 3959.7525337335633,
  'trend_lower': 3959.7525337335633,
  'trend_upper': 3959.7525337335633,
  'weekly': 1382.1213748832024,
  'weekly_lower': 1382.1213748832024,
  'weekly_upper': 1382.1213748832024,
  'yearly': 1344.1383413376243,
  'yearly_lower': 1344.1383413376243,
  'yearly_upper': 1344.1383413376243,
  'yhat': 5781.418344391382,
  'yhat_lower': -4262.772973874018,
  'yhat_upper': 15333.709906373766},
 1: {'additive_terms': 1609.1847938356425,
  'additive_terms_lower': 1609.1847938356425,
  'additive_terms_upper': 1609.1847938356425,
  'daily': -904.5939055630084,
  'daily_lower': -904.5939055630084,
  'daily_upper': -904.5939055630084,
  'ds': Timestamp('2016-01-02 00:00:00'),
  'multiplicative_terms': 0.0,
  'multiplicative_terms_lower': 0.0,
  'multiplicative_terms_upper': 0.0,
  'trend': 3954.608221609561,
  'trend_lower': 3954.608221609561,
  'trend_upper': 3954.608221609561,
  'weekly': 1056.9172554279028,
  'weekly_lower': 1056.9172554279028,
  'weekly_upper': 1056.9172554279028,
  'yearly': 1456.8614439707483,
  'yearly_lower': 1456.8614439707483,
  'yearly_upper': 1456.8614439707483,
  'yhat': 5563.793015445203,
  'yhat_lower': -4892.457856774376,
  'yhat_upper': 15305.24188601227}}

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Попробуйте:

df.to_dict('records')

Это дает вам список словаря без индекса.

0 голосов
/ 05 февраля 2019

to_dict звучит как то, что вы хотите на самом деле.Как это не работает для вас?Вы можете транспонировать свой фрейм данных и принимать только значения словаря.это будет соответствовать тому, что вы ожидаете:

data = df.T.to_dict()
list(data.values())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...