Python 从dict和list生成数据帧的最简单方法
我有一份口述和一份清单:Python 从dict和list生成数据帧的最简单方法,python,pandas,list,dataframe,dictionary,Python,Pandas,List,Dataframe,Dictionary,我有一份口述和一份清单: d1 = {"k1": [1,2,3], "k2": [4,5,6], "k3": [3,2,1]} l1 = ["label1", "label2", "label1"] 我想把它组合成一个数据帧。l1中的每个元素对应于d1 所需输出(数据帧): 最简单和最具Python风格的方法是什么?我们可以使用数据帧。熔化和系列。映射,智能使用压缩列表和di
d1 = {"k1": [1,2,3], "k2": [4,5,6], "k3": [3,2,1]}
l1 = ["label1", "label2", "label1"]
我想把它组合成一个数据帧。l1
中的每个元素对应于d1
所需输出(数据帧):
最简单和最具Python风格的方法是什么?我们可以使用
数据帧。熔化和系列。映射,智能使用压缩列表和dict键:
from collections import OrderedDict
df = pd.DataFrame(d1).melt(var_name='key')
df['label'] = df['key'].map(OrderedDict(zip(d1.keys(), l1)))
key value label
0 k1 1 label1
1 k1 2 label1
2 k1 3 label1
3 k2 4 label2
4 k2 5 label2
5 k2 6 label2
6 k3 3 label1
7 k3 2 label1
8 k3 1 label1
请注意,d1.keys()
的顺序不能保证排序。所以zip(d1.keys(),l1)
可能会给出不同的结果。这与Series.map
@QuangHoang有关系吗?不是map
,而是dict(zip(…)
)。因此,您可能有k1:label2
。是的,使用orderedict
添加了修复,这应该可以解决问题,同意吗@QuangHoangOf courseOrderedDict
可以解决这个问题。但这对OP来说更像是一个数据结构问题。将OrderedDict
包装在zip(d1.keys(),l1)
周围并不能解决d1.keys()
的随机性。
from collections import OrderedDict
df = pd.DataFrame(d1).melt(var_name='key')
df['label'] = df['key'].map(OrderedDict(zip(d1.keys(), l1)))
key value label
0 k1 1 label1
1 k1 2 label1
2 k1 3 label1
3 k2 4 label2
4 k2 5 label2
5 k2 6 label2
6 k3 3 label1
7 k3 2 label1
8 k3 1 label1