Как мне преобразовать этот ряд во вложенную строку json? - PullRequest
0 голосов
/ 16 октября 2018

Итак, у меня есть объект Series с именем ss:

In [137]: d
Out[137]: {'-1': 24.0, '-2': 0.0, '-3': 0.0}

In [138]: ss = pd.Series(d)

In [139]: ss
Out[139]: 
-1    24.0
-2     0.0
-3     0.0
dtype: float64

Как получить строку json в следующей форме?

[
{
  "y": 24.0,
  "x": -1
},
{
  "y": 0.0,
  "x": -2       
},
{
  "y": 0.0,
  "x": -3
}
]

Я пробовал следующее, но это не то, что ожидается.

In [142]: result = json.loads(ss.to_json())

In [143]: result
Out[143]: {u'-1': 24.0, u'-2': 0.0, u'-3': 0.0}

РЕДАКТИРОВАТЬ: согласно комментарию от Антона vBR, я пытаюсь с DataFrame:

In [151]: dd = {'-1': [24.0], '-2': [0.0], '-3': [0.0]}

In [153]: df = pd.DataFrame(dd)

In [154]: df
Out[154]: 
     -1   -2   -3
0  24.0  0.0  0.0

In [156]: df.to_dict()
Out[156]: {'-1': {0: 24.0}, '-2': {0: 0.0}, '-3': {0: 0.0}}

In [157]: df.to_json()
Out[157]: '{"-1":{"0":24.0},"-2":{"0":0.0},"-3":{"0":0.0}}'

Но это все еще неблизко к тому, что мне нужно.

Ответы [ 3 ]

0 голосов
/ 16 октября 2018

Вы можете сделать что-то вроде этого:

import json
import pandas as pd

d = {'-1': 24.0, '-2': 0.0, '-3': 0.0}
ss = pd.Series(d)

result = json.dumps([{"x": k, "y": v} for k, v in ss.items()])
print(result)

Вывод

[{"x": "-1", "y": 24.0}, {"x": "-2", "y": 0.0}, {"x": "-3", "y": 0.0}]
0 голосов
/ 16 октября 2018

Сначала преобразуйте вашу серию в Dataframe, затем используйте встроенный метод для Dataframes:

df = pd.DataFrame(list(d.items()), columns=['x','y']).to_json(orient='records')
0 голосов
/ 16 октября 2018

Хорошо, идея заключается в том, чтобы перейти непосредственно к DataFrame путем доступа к ключам и значениям ваших словарей через функцию items().

Давайте вызовем столбцы x и y, чтобы получить желаемый результат.

обновлено для вывода json

import json
import pandas as pd

d = {'-1': 24.0, '-2': 0.0, '-3': 0.0}
df = pd.DataFrame(list(d.items()), columns=['x','y'])
df['x'] = pd.to_numeric(df['x'])
dout = json.dumps(df.to_dict(orient='records'), indent=2)
# "[{"y": 0.0, "x": -2.0}, {"y": 0.0, "x": -3.0}, {"y": 24.0, "x": -1.0}]" with indent None

print(dout)

Возвращает

[
  {
    "y": 0.0,
    "x": -2.0
  },
  {
    "y": 0.0,
    "x": -3.0
  },
  {
    "y": 24.0,
    "x": -1.0
  }
]
...