我有以下数据:
data = [{
'color': ['red','green'],
'name': 'obj1'
}, {
'color': ['blue','brown','pink'],
'name': 'obj2'
}]
当我使用熊猫时,它会给我这样的输出:
color name
0 [red, green] obj1
1 [blue, brown, pink] obj2
但是我需要这样的输出:
color.0 color.1 color.2 name
0 red green NaN obj1
1 blue brown pink obj2
我尝试过json_normalize
,但无法获得所需的输出。
谢谢。
答案 0 :(得分:1)
您可以预处理字典列表,然后调用DataFrame构造函数:
out = []
for x in data:
d = {}
for k, v in x.items():
if isinstance(v, list):
for i, y in enumerate(v):
d['{}.{}'.format(k,i)] = y
else:
d[k] = v
out.append(d)
print (out)
[{'color.0': 'red', 'color.1': 'green', 'name': 'obj1'},
{'color.0': 'blue', 'color.1': 'brown', 'color.2': 'pink', 'name': 'obj2'}]
df = pd.DataFrame(out).sort_index(axis=1)
print (df)
color.0 color.1 color.2 name
0 red green NaN obj1
1 blue brown pink obj2
您可以创建DataFrame,然后将列表列扩展为多个:
df = pd.DataFrame(data)
df1 = pd.DataFrame(df.pop('color').values.tolist(), index=df.index)
df = df.join(df1.add_prefix('color.')).sort_index(axis=1)
print (df)
color.0 color.1 color.2 name
0 red green None obj1
1 blue brown pink obj2
答案 1 :(得分:0)
您可以使用pd.Series:
df = pd.DataFrame(data)
df[['color.0', 'color.1', 'color.2']]=df.color.apply(pd.Series)
df.drop('color',1)
name color.0 color.1 color.2
0 obj1 red green NaN
1 obj2 blue brown pink