追加为空数组

时间:2018-12-28 14:10:12

标签: python-3.x pandas

我在网上看到了我正在玩的这段代码,并试图从中学习。试图附加到创建的空数组时卡住了吗?它返回一个indexerror,“ IndexError:索引0超出了轴0的大小0的范围”。请查看下面的代码,感谢您提供的修复帮助。谢谢。

f_HAS = []
f_HDS = []
f_AAS = []
f_ADS = []
for index,row in feat_table.iterrows():
    #print row
     f_HAS.append(table_16[table_16['Team'] == row['HomeTeam']] 
     ['HAS'].values[0])
     f_HDS.append(table_16[table_16['Team'] == row['HomeTeam']] 
     ['HDS'].values[0])
     f_AAS.append(table_16[table_16['Team'] == row['HomeTeam']] 
     ['AAS'].values[0])
     f_ADS.append(table_16[table_16['Team'] == row['HomeTeam']] 
     ['ADS'].values[0])

feat_table['HAS'] = f_HAS
feat_table['HDS'] = f_HDS
feat_table['AAS'] = f_AAS
feat_table['ADS'] = f_ADS  

期望将值附加到新数组中

但它返回了: ------ IndexError:索引0超出了大小为0的轴0的范围

1 个答案:

答案 0 :(得分:0)

我已经创建了一些数据来尝试您的示例:

table_16 = pd.DataFrame({'Team':[1,2,3,4,4],
                         'HAS':['a','b','c','d','e'],
                         'HDS':['q','w','e','r','t'],
                         'HomeTeam':[1,4,4,2,6]})
feat_table = pd.DataFrame()

我做了一些修改:

f_HAS = []
f_HDS = []
for index,row in table_16.iterrows():
    f_HAS.append(table_16[table_16['Team'] == row['HomeTeam']]['HAS'].values[0])
    f_HDS.append(table_16[table_16['Team'] == row['HomeTeam']] 
     ['HDS'].values[0])

feat_table['HAS'] = f_HAS
feat_table['HDS'] = f_HDS

我得到同样的错误:

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-833-3b6ee6636bcd> in <module>
      6 for index,row in table_16.iterrows():
----> 7     f_HAS.append(table_16[table_16['Team'] == row['HomeTeam']]['HAS'].values[0])
      8     f_HDS.append(table_16[table_16['Team'] == row['HomeTeam']] 
      9      ['HDS'].values[0])

IndexError: index 0 is out of bounds for axis 0 with size 0

之所以发生这种情况,是因为在其中一次迭代中,没有像table_16[table_16['Team'] == row['HomeTeam']]这样的原始字符,并且我们不能接受values[0],因为它是空的。

尝试这样的事情:

good_raws = []
for index,row in table_16.iterrows():
    good_raws.append(table_16[table_16['Team'] == row['HomeTeam']])

输出是带有pandas DataFrames的数组。我看到您想要一个数据框,而不是数组。因此,您可以将其与(其中pd是熊猫模块)进行串联:

pd.concat(good_raws)

并有一个数据框:

   Team HAS HDS  HomeTeam
0     1   a   q         1
3     4   d   r         2
4     4   e   t         6
3     4   d   r         2
4     4   e   t         6
1     2   b   w         4

此外,在我的最后一个示例中,我仅使用一个列表来收集所有原始数据(而不是像源代码中那样按单元格收集),因为它会更快,并且在此示例中这没关系。

希望对您有所帮助,但是我认为您的代码示例不是一个很好的示例,请尝试查找一些更好的知识来学习和阅读pandas文档,其中有很多很好的代码示例!