我有一个类似的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对象粘贴到数据帧中时,我总是会得到一些变体:
"得分"列是一个列表。我一直在努力搜索一个例子,但无法弄清楚如何将列表解压缩成我想要的格式。
建议?
答案 0 :(得分:1)
一种方法是为列表中的每个条目创建一个数据框,然后将它们连接起来:
>>> 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