我有一个列表字典说:data = {'a': [80, 130], 'b': [64], 'c': [58,80]}
如何将其展平并将其转换为如下所示的数据帧:
最佳答案
如果不想要一个元素列表,请使用带有 if-else
的嵌套列表理解:
df = pd.DataFrame([('{}{}'.format(k, i), v1)
if len(v) > 1
else (k, v1)
for k, v in data.items()
for i, v1 in enumerate(v, 1)], columns=['Index','Data'])
print (df)
Index Data
0 a1 80
1 a2 130
2 b 64
3 c1 58
4 c2 80
编辑:
data = {'a': [80, 130], 'b': np.nan, 'c': [58,80], 'd':[34]}
out = []
for k, v in data.items():
if isinstance(v, float):
out.append([k, v])
else:
for i, x in enumerate(v, 1):
if len(v) == 1:
out.append([k, x])
else:
out.append(['{}{}'.format(k, i), x])
print (out)
[['a1', 80], ['a2', 130], ['b', nan], ['c1', 58], ['c2', 80], ['d', 34]]
df = pd.DataFrame(out, columns=['Index','Data'])
print (df)
Index Data
0 a1 80.0
1 a2 130.0
2 b NaN
3 c1 58.0
4 c2 80.0
5 d 34.0
关于python - 将列表的字典展平为数据框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51654012/