我有一个像这样的数据文件:
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条件。
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。
我要指出的是,当仪器不存在时,数据中就没有行。因此,类似于“是空的”的代码将无法工作。
发布于 2018-05-31 11:40:32
我认为问题是过滤返回空的DataFrame
,所以不可能选择第一个值并产生错误。
因此,需要检查empty
是否与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]
发布于 2018-05-31 11:43:08
您可以使用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
错误来实现的。
发布于 2018-05-31 11:49:56
由于访问器内的条件可能不满足,所以您可以始终选择try
和except
,即
if condition :
try:
return Repo.loc[(Repo['Instrument']=='GC_LCH_BELGIUM')&(Repo['Term Code']=='T-N'),'WTD Rate'].iloc[0]
except IndexError:
return 10
https://stackoverflow.com/questions/50623430
复制相似问题