Преобразование серии panda в массив объектов как в javascript

Я новичок в питоне. У меня есть серия о пандах, подобная следующей,

                        count
timestamp                    
1980-10-05 01:12:00   56.4691
1980-10-05 01:13:00   54.9415
1980-10-05 01:14:00   52.0359
1980-10-05 01:15:00   47.7313
1980-10-05 01:16:00   50.5876
1980-10-05 01:17:00   48.2846
1980-10-05 01:18:00   44.6438
1980-10-05 01:19:00   42.3077
1980-10-05 01:20:00   38.8363
1980-10-05 01:21:00   41.0145
1980-10-05 01:22:00   39.5523
1980-10-05 01:23:00   38.9117
1980-10-05 01:24:00   37.3052
1980-10-05 01:25:00   36.1725
1980-10-05 01:26:00   37.5150
1980-10-05 01:27:00   38.1387
1980-10-05 01:28:00   39.5351
1980-10-05 01:29:00   38.1834
1980-10-05 01:30:00   37.5988
1980-10-05 01:31:00   43.6522
1980-10-05 01:32:00   47.9571
1980-10-05 13:08:00  210.0000
1980-10-05 13:18:00   40.0000
1980-10-05 13:28:00  250.0000
1980-10-05 13:38:00   40.0000

Я хочу преобразовать это как массив объектов как;

[
    {timestamp: 1980-10-05 13:38:00, count: 40.0000},
    {timestamp: 1980-10-05 13:38:00, count: 40.0000},
    {timestamp: 1980-10-05 13:38:00, count: 40.0000},
    {timestamp: 1980-10-05 13:38:00, count: 40.0000}
]

Можно ли это сделать на питоне?

вы имеете в виду, что хотите преобразовать фрейм данных в объект json?

Vikas P 31.10.2018 12:37

да, я хочу преобразовать в формат массива объектов.

igitcanz 31.10.2018 12:38

@igitcanz, вы заставили его работать, обновив pandas?

timgeb 31.10.2018 14:16
1
3
199
3

Ответы 3

Попробуйте вот так:

arr_obj = df.to_dict(orient='records')

Вам нужно reset_index с to_json с параметром orient='records' как:

df.reset_index().to_json(orient='records')

Вы можете использовать df.to_dict с ключевым словом orient='records'.

Исходный фрейм данных:

>>> df.head()
>>> 
                       count
timestamp                   
1980-10-05 01:12:00  56.4691
1980-10-05 01:13:00  54.9415
1980-10-05 01:14:00  52.0359
1980-10-05 01:15:00  47.7313
1980-10-05 01:16:00  50.5876

Сделайте 'timestamp' столбцом:

>>> df = df.reset_index()
>>> df.head()
>>> 
            timestamp    count
0 1980-10-05 01:12:00  56.4691
1 1980-10-05 01:13:00  54.9415
2 1980-10-05 01:14:00  52.0359
3 1980-10-05 01:15:00  47.7313
4 1980-10-05 01:16:00  50.5876

Используйте df.to_dict, чтобы получить окончательный результат:

>>> result = df.to_dict(orient='records')
>>> result[:5]
>>> 
[{'count': 56.4691, 'timestamp': Timestamp('1980-10-05 01:12:00')},
 {'count': 54.9415, 'timestamp': Timestamp('1980-10-05 01:13:00')},
 {'count': 52.0359, 'timestamp': Timestamp('1980-10-05 01:14:00')},
 {'count': 47.7313, 'timestamp': Timestamp('1980-10-05 01:15:00')},
 {'count': 50.5876, 'timestamp': Timestamp('1980-10-05 01:16:00')}] 

edit: Мне неясно, как именно вы хотите, чтобы временные метки были представлены в конечном результате. Возможно, вам придется использовать to_json вместо to_dict, как показано в Ответ Сандипа Кадапы.

Я пробовал, но это дает мне ошибку, поскольку 'TypeError: to_dict () получил неожиданный аргумент ключевого слова' orient ''

igitcanz 31.10.2018 12:46

@igitcanz какую версию pandas вы используете?

timgeb 31.10.2018 12:49

Другие вопросы по теме