Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.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 连接不同长度的numpy数组字典(如果可能,避免手动循环)_Python_Dictionary_Pandas_Concatenation - Fatal编程技术网

Python 连接不同长度的numpy数组字典(如果可能,避免手动循环)

Python 连接不同长度的numpy数组字典(如果可能,避免手动循环),python,dictionary,pandas,concatenation,Python,Dictionary,Pandas,Concatenation,我有一个与这里讨论的问题类似的问题 我正在寻找一种方法来连接两个python字典中的值,这两个字典包含任意大小的numpy数组,同时避免手动循环字典键。例如: import numpy as np # Create first dictionary n1 = 3 s = np.random.randint(1,101,n1) n2 = 2 r = np.random.rand(n2) d = {"r":r,"s":s} print "d = ",d # Create second dic

我有一个与这里讨论的问题类似的问题

我正在寻找一种方法来连接两个python字典中的值,这两个字典包含任意大小的numpy数组,同时避免手动循环字典键。例如:

import numpy as np

# Create first dictionary
n1 = 3
s = np.random.randint(1,101,n1)
n2 = 2
r = np.random.rand(n2)
d = {"r":r,"s":s}
print "d = ",d

# Create second dictionary
n3 = 1
s = np.random.randint(1,101,n3)
n4 = 3
r = np.random.rand(n4)
d2 = {"r":r,"s":s}
print "d2 = ",d2

# Some operation to combine the two dictionaries...
d = SomeOperation(d,d2)

# Updated dictionary
print "d3 = ",d
输出

>> d =  {'s': array([75, 25, 88]), 'r': array([ 0.1021227 ,  0.99454874])}
>> d2 =  {'s': array([78]), 'r': array([ 0.27610587,  0.57037473, 0.59876391])}
>> d3 =  {'s': array([75, 25, 88, 78]), 'r': array([ 0.1021227 ,  0.99454874, 0.27610587,  0.57037473, 0.59876391])}
i、 e.因此,如果密钥已经存在,则将该密钥下存储的numpy数组追加到

前面讨论中提出的使用pandas包的解决方案不起作用,因为它需要具有相同长度的阵列(n1=n2和n3=n4)

是否有人知道这样做的最佳方法,同时尽量减少使用慢速手动
循环?(我希望避免循环,因为我希望组合的字典可能有数百个键)


感谢(也感谢“Aim”提出了一个非常明确的问题)

一种方法是使用系列字典(即值是系列而不是数组):

这样,您就可以将其传递到DataFrame构造函数中:

In [14]: pd.DataFrame(d2)
Out[14]:
          r   s
0  0.353632  46
1  0.293636 NaN
2  0.913075 NaN

哇,我不知道连续剧和Ndarray在这里的表现不同!这里它们不同的原因是序列提供对齐,例如,它将值映射到索引(在本例中为0,1,2)。numpy数组未映射,因此无法对齐。这本质上是一个退化的情况,因为在实践中这是非常低效的,最好将小数组排列在一个更大的二维数组中,并填充数组。此外,如果使用python2.6,请将第三行替换为:d2=dict([(name,pd.Series(arr))代替name,arr in d2.iteritems())@Jeff:谢谢你的解释。
In [14]: pd.DataFrame(d2)
Out[14]:
          r   s
0  0.353632  46
1  0.293636 NaN
2  0.913075 NaN