带有for循环的格式获取ValueError:值的长度与索引的长度不匹配

时间:2018-03-22 00:35:49

标签: python pandas for-loop

我使用以下代码:

string="Verificamos {} vem crescendo em media {} porcento ao ano. A empresa {} por exemplo {}"
df['go']=[string.format(*r) for r in dfcres[['CNAE_x','Crescimento_t11_Peers_CNAE','Top_Cres1','Top_Cres1%']].values.tolist()]

如果我打印dfcres[['CNAE_x','Crescimento_t11_Peers_CNAE','Top_Cres1','Top_Cres1%']],我会:

         CNAE_x     Crescimento_t11_Peers_CNAE    Top_Cres1   Top_Cres1%
6     "bovinos"                           0.10  "Maria Ltd"         0.22
8      "suínos"                           0.08  "Carla Ltd"         0.10
9  "construção"                           0.93    "Mark SA"         0.30

所以,df [' go']应如下所示:

  go
6 "Verificamos bovinos vem crescendo em media 0.10 porcento ao ano. A empresa Maria Ltd por exemplo 0.22"
8 "Verificamos suínos vem crescendo em media 0.08 porcento ao ano. A empresa Carla Ltd por exemplo 0.10"
9 "Verificamos construção vem crescendo em media 0.93 porcento ao ano. A empresa Maria Ltda por exemplo 0.30"

我收到此错误:

ValueError: Length of values does not match length of index

我不知道这个错误是什么意思。有人可以帮助或建议另一种方法来获得相同的结果吗?

2 个答案:

答案 0 :(得分:1)

我在没有dfcres的情况下在我自己的计算机上尝试了这个,只是将值保存为列表。这很有效。所以,我怀疑问题在于:

  1. 你很可能在前面失踪{}。 (您的预期结果以数字开头)或
  2. 两个括号而不是一个,或
  3. values()函数返回的值
  4. 尝试从那里开始

答案 1 :(得分:1)

你的python版本是什么?它适用于我在Python 3.6.4上使用这个例子:

      CNAE_x  Outravar1   Crescimento_t11_Peers_CNAE    Top_Cres1   Top_Cres1% Outravar2
   "bovinos"         12                         0.10  "Maria Ltd"         0.22    "vaca"
    "suínos"       1575                         0.08  "Carla Ltd"         0.10   "porco"
"construção"        358                         0.93    "Mark SA"         0.30   "casas"

编码:

>>> dfcres = pd.read_clipboard()
    dfcres
    CNAE_x  Outravar1   Crescimento_t11_Peers_CNAE  Top_Cres1   Top_Cres1%  Outravar2
0   bovinos       12                        0.10    Maria Ltd   0.22     vaca
1   suínos      1575                        0.08    Carla Ltd   0.10    porco
2   construção   358                        0.93    Mark SA     0.30    casas

但如果df没有与dfcresc相同的行数,例如

>>> df
    CNAE_x  Outravar1   Crescimento_t11_Peers_CNAE  Top_Cres1   Top_Cres1%  Outravar2
0   bovinos       12                        0.10    Maria Ltd   0.22     vaca
1   construção   358                        0.93    Mark SA     0.30    casas

然后你仍然会收到此消息错误。

如果您不确定两个数据帧是否具有相同的行数,则应避免使用此方法。

如果我的猜测是正确的,df是巴西经济活动(CNAE)的数据框。因此,您可以使用CNAE_x作为唯一标识符,例如:

首先,创建列 dfcres [' go']

dfcres['go']=[string.format(*r) for r in dfcres.loc[,'CNAE_x','Crescimento_t11_Peers_CNAE','Top_Cres1','Top_Cres1%']].values.tolist()]

然后加入匹配具有相同CNAE_x值的行的数据:

pd.merge(df, dfcres,
    how='right', on='CNAE_x')