DataFrame панд к списку диктов с помощью to_json () - PullRequest
0 голосов
/ 11 мая 2018

Итак, я читаю файл xlsx с пандами, а затем анализирую дату и время (Excel - это число с плавающей точкой)

Затем мне нужно разобрать его в Json, и у меня возникают некоторые проблемы.

ШАГ 1 (Перед синтаксическим анализом с to_json ())

df = pandas.read_excel('test.xlsx', names=['date', 'value', 'source'])
df['date'] = pandas.to_datetime(df['date'], format='%b %d %Y.%f')
print(df)

возврат

        date  value                            source
0 2012-05-22      1              xxxxxxxxxxxxxxxxxxxx
1 2012-05-25      1                     xxxxxxxxxxxxx
2 2012-05-30      1  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
3 2012-06-01      1                        xxxxxxxxxx
4 2012-06-08      1                 xxxxxxxxxxxxxxxxx

Кажется, все в порядке, тогда я понял ... 1011 *

payload = df.to_json()

И возвращение

{"date":{"0":1337644800000,"1":1337904000000,"2":1338336000000,"3":1338508800000,"4":1339113600000},"value":{"0":1,"1":1,"2":1,"3":1,"4":1},"source":{"0":"xxxxxxxxxxxxxxx","1":"xxxxxxxxxx","2":"xxxxxxxxxxx","3":"xxxxxxxxxxxxxxxx","4":"xxxxxxxxxxxxxxx"}}

Так что я делаю не так? Я пропускаю аргументы в to_json ()? Halp пожалуйста: c

Мне нужно, чтобы это было так:

[{"date":"2012-05-22","value":1,"source":"xxxxxxxxxxxxxxxxxxxx"},
{"date":"2012-05-25","value":1,"source":"xxxxxxxxxxxxxxxxxxxx"},
{"date":"2012-05-30","value":1,"source":"xxxxxxxxxxxxxxxxxxxxx"},
{"date":"2012-06-01","value":1,"source":"xxxxxxxxxxxxxxxxxxxx"},
{"date":"2012-06-08","value":1,"source":"xxxxxxxxxxxxxxxxxxxxxx"}]

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Хотя, если вы преобразуете в строку (как упоминалось в других вопросах и комментариях), вы можете получить желаемый формат, который вам может не понадобиться. Проверьте to_json() параметр date_format. Я верю, что вы хотите .to_json(..., date_format='iso').

Согласно документации для параметра date_format:

Для orient = 'table', по умолчанию используется значение iso. Для всех остальных ориентиров по умолчанию используется значение «эпоха».

0 голосов
/ 11 мая 2018

Вам понадобится пара исправлений -

  1. Конвертируйте ваш столбец даты в строку, потому что ваш текущий столбец даты и времени приводится к целочисленным временным меткам Unix. В качестве альтернативы используйте аргумент date_format с to_json, как предполагает другой ответ.
  2. Изменить ориентацию при сохранении в JSON; укажите orient='records'.

df['date'] = pandas.to_datetime(df['date'], format='%b %d %Y.%f').astype(str)
payload = df.to_json(orient='records')

print(payload)
'[{"date":"2012-05-22","source":"xxxxxxxxxxxxxxxxxxxx","value":1},{"date":"2012-05-25","source":"xxxxxxxxxxxxxxxxxxxx","value":1},{"date":"2012-05-30","source":"xxxxxxxxxxxxxxxxxxxxx","value":1},{"date":"2012-06-01","source":"xxxxxxxxxxxxxxxxxxxx","value":1},{"date":"2012-06-08","source":"xxxxxxxxxxxxxxxxxxxxxx","value":1}]'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...