JSON 到堆叠数据帧
JSON to Stacked DataFrame
我有一个 JSON 文件,如下所示:
[
{
"id" : "abc",
"mood" : "happy",
"scores" : [
10,
15,
20
]
},
{
"id" : "def",
"mood" : "happy",
"scores" : [
103,
150,
200
]
},
{
"id" : "ghi",
"mood" : "sad",
"scores" : [
1,
15,
20,
45,
600,
1400
]
},
{
"id" : "jkl",
"mood" : "sad",
"scores" : [
10,
100,
1000,
10000
]
}
]
我正在尝试进入一个看起来像这样的堆叠 DataFrame:
id mood score
0 abc happy 10
1 abc happy 15
2 abc happy 20
3 def happy 103
...
14 jkl sad 10
15 jkl sad 100
等等
但是,当我将 JSON 对象粘贴到数据框中时,我总是会得到一些变化:
其中 "scores" 列是一个列表。我为示例搜索了很长时间,但无法弄清楚如何将列表解压缩为我想要的格式。
建议?
一种方法是为列表中的每个条目创建一个数据框,然后将它们连接起来:
>>> pd.concat([pd.DataFrame(d) for d in data])
不过,这似乎很浪费,因为您为每个条目分配了一块内存,只是为了在最后将它们连接起来。或者,您可以定义一个生成器:
def iter_data(data):
for entry in data:
for score in entry['scores']:
yield entry['mood'], entry['id'], score
这样
>>> pd.DataFrame(iter_data(data))
id mood scores
0 abc happy 10
1 abc happy 15
2 abc happy 20
0 def happy 103
1 def happy 150
2 def happy 200
0 ghi sad 1
1 ghi sad 15
2 ghi sad 20
3 ghi sad 45
4 ghi sad 600
5 ghi sad 1400
0 jkl sad 10
1 jkl sad 100
2 jkl sad 1000
3 jkl sad 10000
我有一个 JSON 文件,如下所示:
[
{
"id" : "abc",
"mood" : "happy",
"scores" : [
10,
15,
20
]
},
{
"id" : "def",
"mood" : "happy",
"scores" : [
103,
150,
200
]
},
{
"id" : "ghi",
"mood" : "sad",
"scores" : [
1,
15,
20,
45,
600,
1400
]
},
{
"id" : "jkl",
"mood" : "sad",
"scores" : [
10,
100,
1000,
10000
]
}
]
我正在尝试进入一个看起来像这样的堆叠 DataFrame:
id mood score
0 abc happy 10
1 abc happy 15
2 abc happy 20
3 def happy 103
...
14 jkl sad 10
15 jkl sad 100
等等
但是,当我将 JSON 对象粘贴到数据框中时,我总是会得到一些变化:
其中 "scores" 列是一个列表。我为示例搜索了很长时间,但无法弄清楚如何将列表解压缩为我想要的格式。
建议?
一种方法是为列表中的每个条目创建一个数据框,然后将它们连接起来:
>>> pd.concat([pd.DataFrame(d) for d in data])
不过,这似乎很浪费,因为您为每个条目分配了一块内存,只是为了在最后将它们连接起来。或者,您可以定义一个生成器:
def iter_data(data):
for entry in data:
for score in entry['scores']:
yield entry['mood'], entry['id'], score
这样
>>> pd.DataFrame(iter_data(data))
id mood scores
0 abc happy 10
1 abc happy 15
2 abc happy 20
0 def happy 103
1 def happy 150
2 def happy 200
0 ghi sad 1
1 ghi sad 15
2 ghi sad 20
3 ghi sad 45
4 ghi sad 600
5 ghi sad 1400
0 jkl sad 10
1 jkl sad 100
2 jkl sad 1000
3 jkl sad 10000