索引器错误:单个位置索引器超出边界和if条件

2024-06-16 10:13:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,看起来像这样:

    Repo
    Out[624]: 

1             Instrument    Term Code  WTD Rate
2    GC_AUSTRIA_SUB_10YR          T-N     -0.49
3    GC_AUSTRIA_SUB_10YR            O -0.467643
4      R_RAGB_1.15_10/18          S-N -0.520299
5      R_RAGB_4.35_03/19          S-N -0.497759
6      R_RAGB_4.35_03/19          T-N      -0.5
7      R_RAGB_1.95_06/19          S-N -0.501478
8      R_RAGB_0.25_10/19          S-N -0.497765

我有一个if条件,它取决于“仪器”一栏

^{pr2}$

问题是仪器名称有时不存在,并会出现错误IndexError: single positional indexer is out-of-bounds

在“如果条件”中,如果仪器确实存在(或者如果存在错误)会恢复到默认值,比如说10。在

我应该指出,当仪器不存在时,数据帧中没有行。因此,看起来像“is empty”的代码将无法工作


Tags: 数据is错误coderepoout条件gc
3条回答

我认为问题是过滤返回空DataFrame,所以不可能选择第一个值,并引发错误。在

因此需要检查^{}是否与{}一起使用:

if condition:
   a =  Repo.loc[(Repo['Instrument']=='GC_LCH_BELGIUM')&(Repo['Term Code']=='T-N'),'WTD Rate']
   return 'empty' if a.empty else a.iloc[0]

由于访问器内部的条件有可能不满足,所以可以始终使用try和{},即

if condition :
    try:
       return Repo.loc[(Repo['Instrument']=='GC_LCH_BELGIUM')&(Repo['Term Code']=='T-N'),'WTD Rate'].iloc[0]
    except IndexError:
       return 10

您可以使用next并提供10的默认参数:

if condition:
    mask = (Repo['Instrument']=='GC_LCH_BELGIUM') & (Repo['Term Code']=='T-N')
    s = Repo.loc[mask, 'WTD']
    return next(iter(s), 10)

在内部,这是通过在序列为空时引发StopIteration错误并恢复为默认值来实现的。在

相关问题 更多 >