首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >IndexError:单位置索引器是不允许的,如果是条件

IndexError:单位置索引器是不允许的,如果是条件
EN

Stack Overflow用户
提问于 2018-05-31 11:39:10
回答 3查看 3K关注 0票数 1

我有一个像这样的数据文件:

代码语言:javascript
运行
复制
    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条件。

代码语言:javascript
运行
复制
if condition:
   return Repo.loc[(Repo['Instrument']=='GC_LCH_BELGIUM') & (Repo['Term Code']=='T-N'),'WTD Rate'].iloc[0]

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

我如何在"if条件“中说,如果该仪器确实存在(或者有错误),则恢复到默认值,例如10。

我要指出的是,当仪器不存在时,数据中就没有行。因此,类似于“是空的”的代码将无法工作。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-31 11:40:32

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

因此,需要检查empty是否与if-else

代码语言:javascript
运行
复制
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]
票数 2
EN

Stack Overflow用户

发布于 2018-05-31 11:43:08

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

代码语言:javascript
运行
复制
if condition:
    mask = (Repo['Instrument']=='GC_LCH_BELGIUM') & (Repo['Term Code']=='T-N')
    s = Repo.loc[mask, 'WTD']
    return next(iter(s), 10)

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

票数 2
EN

Stack Overflow用户

发布于 2018-05-31 11:49:56

由于访问器内的条件可能不满足,所以您可以始终选择tryexcept,即

代码语言:javascript
运行
复制
if condition :
    try:
       return Repo.loc[(Repo['Instrument']=='GC_LCH_BELGIUM')&(Repo['Term Code']=='T-N'),'WTD Rate'].iloc[0]
    except IndexError:
       return 10
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50623430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档