我有一个像这样的json文件:
{
"A": {
"type1": [
2,
26,
288,
...
],
"type2": [
2,
3,
5,
...
],
"type3": [
23,
26,
288,
...
]
},
"B": {
"type1": [
2,
26,
288,
...
],
"type2": [
2,
3,
5,
...
],
"type3": [
23,
26,
288,
...
]
},
...
"K": {
"type1": [
2,
26,
288,
...
],
"type2": [
2,
3,
5,
...
],
"type3": [
23,
26,
288,
...
]
}
}
这是用于复制的示例字典(我从A到J大约有20列,但只有3种类型:type1,type2,type3):
pd.DataFrame({'A': {'type1': ['32',
'21',
'43',
'43',
'43',
'43',
'43',
'43'],
'type2': [
0.133333333333333,
0.36666666666666703,
0.1,
0.30000000000000004,
0.16666666666666702,
0.033333333333333,
0.2,
0.066666666666666],
'type3': [
3,
9,
5,
1,
6,
2]},
'B': {'type1': [
'43',
'43',
'43',
'43',
'43'],
'type2': [
0.23333333333333303,
0.266666666666667,
0.30000000000000004,
0.5666666666666671,
0.16666666666666702,
0.266666666666667],
'type3': [
10,
6,
17,
7,
8,
9,
17,
5,
8]},
'C': {'type1': [
'43',
'43',
'43',
'43',
'43',
'43'],
'type2': [
5.23333333333333,
6.1,
5.4,
3.23333333333333,
17.4,
5.56666666666667,
10.4333333333333,
2.1],
'type3': [
183,
162,
97,
522,
167,
313,
63]},
})
我的df最后应该看起来像这样:
type1 type2 type3
A 32 0.13 3
A 21 0.36 9
A
........
B
........
C
........
J
所以我调换了它:但是后来我不确定如何解压缩这些列表。每次尝试时,我都会遇到一些循环:
for x in df.index:
for y in df.loc[x]["type1"]:
df.iloc[index] = df.append({"index": x, "type": y}, ignore_index=True)
index += 1
而且显然不是要走的路。
我想知道是否有更简单的方法,也许是在加载json时?
谢谢!
我正在使用for循环这.apply(pd.Series).stack
是关键
df=df.T
l=[df[x].apply(pd.Series).stack() for x in df.columns]
s=pd.concat(l,1).reset_index(level=1,drop=True)
s.columns=df.columns
s
Out[347]:
type1 type2 type3
A 32 0.133333 3.0
A 21 0.366667 9.0
A 43 0.100000 5.0
A 43 0.300000 1.0
A 43 0.166667 6.0
A 43 0.033333 2.0
A 43 0.200000 NaN
A 43 0.066667 NaN
B 43 0.233333 10.0
B 43 0.266667 6.0
B 43 0.300000 17.0
B 43 0.566667 7.0
B 43 0.166667 8.0
B NaN 0.266667 9.0
B NaN NaN 17.0
B NaN NaN 5.0
B NaN NaN 8.0
C 43 5.233333 183.0
C 43 6.100000 162.0
C 43 5.400000 97.0
C 43 3.233333 522.0
C 43 17.400000 167.0
C 43 5.566667 313.0
C NaN 10.433333 63.0
C NaN 2.100000 NaN
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句