Python 将一对多映射字典转换为数据帧
我有一本字典如下:Python 将一对多映射字典转换为数据帧,python,pandas,dictionary,Python,Pandas,Dictionary,我有一本字典如下: d={1:(array[2,3]), 2:(array[8,4,5]), 3:(array[6,7,8,9])} 如图所示,这里每个键的值都是可变长度数组 现在我想把它转换成数据帧。因此,输出如下所示: A B 1 2 1 3 2 8 2 4 2 5 3 6 3 7 3 8 3 9 我使用了pd.Dataframe(d),但它不能处理一对多映射。如果您能提供任何帮助,我们将不胜感激。使用构造函数,以获得列表的长度(数组已转换为列表)
d={1:(array[2,3]), 2:(array[8,4,5]), 3:(array[6,7,8,9])}
如图所示,这里每个键的值都是可变长度数组
现在我想把它转换成数据帧。因此,输出如下所示:
A B
1 2
1 3
2 8
2 4
2 5
3 6
3 7
3 8
3 9
我使用了pd.Dataframe(d),但它不能处理一对多映射。如果您能提供任何帮助,我们将不胜感激。使用构造函数,以获得列表的长度(数组已转换为列表)
然后创建新的,并:
设置
d = {1: np.array([2,3]), 2: np.array([8,4,5]), 3: np.array([6,7,8,9])}
以下是我的版本:
(pd.DataFrame.from_dict(d, orient='index').rename_axis('A')
.stack()
.reset_index(name='B')
.drop('level_1', axis=1)
.astype('int'))
Out[63]:
A B
0 1 2
1 1 3
2 2 8
3 2 4
4 2 5
5 3 6
6 3 7
7 3 8
8 3 9
回答得很好。但是,当我使用相同的示例执行此操作时,最后一个df构造函数语句会给我以下错误“repeat takes 2 argument,3 gived),我只使用上面的示例。它在l=a.str.len()之前工作正常。但是如上所述,它会给我最后一个语句中的错误。没有df=pd.DataFrame({'a':np.repeat(a.index,l),'B':np.concatenate(a.values)})返回一个错误:TypeError:repeat()只接受2个参数(给定3个参数)是的,这有效。谢谢!!。但是上一个版本有什么问题吗?我不知道,对我来说,这两个版本都有效。我使用熊猫(0.20.1)和python 3的上一个版本,可能有问题。
d = {1: np.array([2,3]), 2: np.array([8,4,5]), 3: np.array([6,7,8,9])}
(pd.DataFrame.from_dict(d, orient='index').rename_axis('A')
.stack()
.reset_index(name='B')
.drop('level_1', axis=1)
.astype('int'))
Out[63]:
A B
0 1 2
1 1 3
2 2 8
3 2 4
4 2 5
5 3 6
6 3 7
7 3 8
8 3 9