我認爲有可能的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