Python 连接不同长度的numpy数组字典(如果可能,避免手动循环)
我有一个与这里讨论的问题类似的问题 我正在寻找一种方法来连接两个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
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