ValueError:长度必须匹配才能比较嵌套循环

时间:2019-02-20 14:48:24

标签: python python-3.x pandas list nested-loops

我有两个数据框coinnova_array_df(1)和sf_array_df(2)。我需要创建一个列表,其中包含(1)中的每个记录的(2)行中的名字和姓氏值匹配的行号,并且组合必须在(2)中唯一)。我到目前为止可以产生的代码显示在下面:

x_list = \
[z \
    for zz in coinnova_array_df['row_in_i'] \
        for z in sf_array_df['row_in_j'] \
            if sf_array_df[ \
                (sf_array_df['LastName'] == coinnova_array_df.loc[zz, 'COINNOVA results__familyName']) & \
                (sf_array_df['FirstName'] == coinnova_array_df.loc[zz, 'COINNOVA results__givenName']) \
               ].shape[0] == 1 \
        else 10000
]  

我的问题是出现以下错误,并且似乎无法确定问题的根源:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-113-790dea94331a> in <module>
      7         ].shape[0] == 1 \
      8     else 1000000 \
----> 9     for zz in range(0, coinnova_array_df.shape[0]-1)
     10     for z in range(0, sf_array_df.shape[0]-1) \
     11 ]    

<ipython-input-113-790dea94331a> in <listcomp>(.0)
      8     else 1000000 \
      9     for zz in range(0, coinnova_array_df.shape[0]-1)
---> 10     for z in range(0, sf_array_df.shape[0]-1) \
     11 ]    

~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\ops.py in wrapper(self, other, axis)
   1251             # as it will broadcast
   1252             if other.ndim != 0 and len(self) != len(other):
-> 1253                 raise ValueError('Lengths must match to compare')
   1254 
   1255             res_values = na_op(self.values, np.asarray(other))

ValueError: Lengths must match to compare

能不能帮我解决这个问题,或者如果不能解决,请指出正确的方向吗?

谢谢!

编辑21/02/2019

描述结果太大,因此我将尝试另一种方法。数据帧的组成如下:

coinnova_array_df
shape: (161, 5)
variables: 
"COINNOVA results__familyName" np.array
"COINNOVA results__givenName"  np.array
"COINNOVA results__email"      np.array
"row_in_i"                     integer
"row_in_j"                     integer

coinnova_array_df

sf_array_df
shape: (7127, 4)
"LastName"               np.array
"FirstName"              np.array
"Primary_Email_BI__c"    np.array
"row_in_j"               integer

sf_array_df

变量被命名为“ familyName”,“ FirstName”等,因为np.arrays包含实际名称/姓氏/电子邮件中各个字符的ASCII码。我试图通过将字符串转换为数字并在匹配中使用数字表示形式,来找到一种加快我开发的字符串匹配脚本的方法。

0 个答案:

没有答案