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-很高兴你能帮忙!天气真好!我也喜欢这段代码,永远不会想到下一段(我也喜欢这段代码,永远不会想到下一段)