我认为有可能的3个州 - 没有价值 - 它返回len=0
,匹配更多的值 - 它返回len>1
和标量len==1
。
所以,你的代码看起来正确,只有一点点进行了改进:
myvals = df.loc[df['criterion']=='value', 'parameterofinterest']
if len(myvals) == 1:
myvals = myvals.item()
else:
raise ValueError('Something messed up the data integrity.')
可以包裹功能:
def scalar_only(mask_col, val, another_col):
myvals = df.loc[df[mask_col]==val, another_col]
if len(myvals) != 1:
raise ValueError('Something messed up the data integrity.')
else:
return myvals.item()
df = pd.DataFrame({'parameterofinterest': [25.0, 38.0, 34.6],
'criterion': ['value', 'aa', 'bb']})
print (scalar_only('criterion', 'value', 'parameterofinterest'))
25.0
df = pd.DataFrame({'parameterofinterest': [25.0, 38.0, 34.6],
'criterion': ['dd', 'aa', 'bb']})
print (scalar_only('criterion', 'value', 'parameterofinterest'))
ValueError: Something messed up the data integrity.
df = pd.DataFrame({'parameterofinterest': [25.0, 38.0, 34.6],
'criterion': ['value', 'value', 'bb']})
print (scalar_only('criterion', 'value', 'parameterofinterest'))
ValueError: Something messed up the data integrity.
样本数据提供给重现同样的错误? – Dark
它可以是任何类型的数据,其中'value'预计只会在'criterion'列出现一次。 – TheChymera
你可以对所有值做初步检查吗?就像'(df ['criterion'] .value_counts()== 1).all()'? – IanS