Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将一对多映射字典转换为数据帧_Python_Pandas_Dictionary - Fatal编程技术网

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