所以我有一个名为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}}'
但是它仍然不能满足我的需求。
答案 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。
让我们调用列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
}
]
答案 2 :(得分:0)
首先将系列转换为数据框,然后在数据框上使用内置方法:
df = pd.DataFrame(list(d.items()), columns=['x','y']).to_json(orient='records')