Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 索引器:单个位置索引器超出范围,且处于if条件_Python_Python 3.x_Pandas_If Statement_Series - Fatal编程技术网

Python 索引器:单个位置索引器超出范围,且处于if条件

Python 索引器:单个位置索引器超出范围,且处于if条件,python,python-3.x,pandas,if-statement,series,Python,Python 3.x,Pandas,If Statement,Series,我有一个如下所示的数据帧: 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_

我有一个如下所示的数据帧:

    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条件

问题是,仪器名称有时不存在,并出现错误
索引器:单个位置索引器超出范围

我如何在“如果条件”中说,如果仪器确实存在(或如果存在错误),将恢复到默认值(例如10)


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

我认为问题在于过滤返回空的
数据帧
,所以不可能选择第一个值并引发错误

因此需要使用
if-else检查是否:

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]

我认为问题在于过滤返回空的
数据帧
,所以不可能选择第一个值,并引发错误

因此需要使用
if-else检查是否:

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]

您可以使用
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
错误并恢复为默认值来实现的。

您可以使用
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
错误并恢复到默认值来实现的。

由于访问器内部的条件可能不满足,因此您可以始终选择
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

由于存在不符合访问者内部条件的可能性,您可以始终选择
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

这是一个非常有趣的第二个解决方案。这是一个非常有趣的第二个解决方案。嗨,耶兹雷尔。您是对的,筛选返回空数据帧。你的建议很管用。我会把它写进我的代码里。感谢you@SBad-很高兴你能帮忙!天气真好!嗨,耶兹雷尔。您是对的,筛选返回空数据帧。你的建议很管用。我会把它写进我的代码里。感谢you@SBad-很高兴你能帮忙!天气真好!我也喜欢这段代码,永远不会想到下一段(我也喜欢这段代码,永远不会想到下一段)