Небольшое объяснение, чтобы уточнить мой комментарий. Предполагая, что ваш dataframe
выглядит как
df = pd.DataFrame({'col1': [12, 14, 87, 16, 90]})
, вы можете сделать
def check_in_range(v, lower_lim, upper_lim):
if lower_lim < v <= upper_lim:
return True
return False
lower_lim, upper_lim = 5, 20
for i, v in enumerate(df['col1']):
if not check_in_range(v, lower_lim, upper_lim):
print(f"value {v} at index {i} is out of range!")
# --> gives you
value 87 at index 2 is out of range!
value 90 at index 4 is out of range!
Таким образом, ваша функция проверки в основном в порядке. Однако, если вы вызовете enumerate
a df
, значения будут именами столбцов. Вам нужно перечислить конкретный столбец.
Что касается вашей идеи вызвать исключение, я бы посоветовал взглянуть на повышение и утверждение .
Таким образом, вы можете, например, использовать raise
:
for i, v in enumerate(df['col1']):
if not check_in_range(v, lower_lim, upper_lim):
raise ValueError(f"value {v} at index {i} is out of range")
# --> gives you
ValueError: value 87 at index 2 is out of range
или assert
:
for i, v in enumerate(df['col1']):
assert v > lower_lim and v <= upper_lim, f"value {v} at index {i} is out of range"
# --> gives you
AssertionError: value 87 at index 2 is out of range
Примечание: Если у вас есть df
, почему бы не использовать его функции для удобства? Чтобы получить значения в диапазоне столбца, вы можете просто сделать
df[(df['col1'] > lower_lim) & (df['col1'] <= upper_lim)]
# --> gives you
col1
0 12
1 14
3 16