如何将此系列转换为嵌套的json字符串?

时间:2018-10-16 19:36:31

标签: python json pandas series

所以我有一个名为ss的Series对象:

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}

编辑:根据来自Anton 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 :(得分:2)

您可以执行以下操作:

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}]

答案 1 :(得分:0)

好吧,这里的想法是通过items()函数访问字典键和值来直接进入DataFrame。

让我们调用列xy以获得所需的输出。

已更新以获取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
  }
]

答案 2 :(得分:0)

首先将系列转换为数据框,然后在数据框上使用内置方法:

df = pd.DataFrame(list(d.items()), columns=['x','y']).to_json(orient='records')