(я предполагаю, что df
- это кадр данных pandas)
Вы сами нашли проблему.
Вы сказали, что df['a']
содержит целые числа и 'None'
.'None'
является строкой, поэтому ее нельзя сравнивать с целым числом.Это легко воспроизвести:
df = pd.DataFrame({'a': [1, 'None', 3, 4, 5]})
if df['a'] < 3:
pass
TypeError: '<' not supported between instances of 'str' and 'int'
Есть еще одна проблема.Даже если бы df['a']
содержал только целые числа, этот код не работал бы:
df = pd.DataFrame({'a': [1, 2, 3, 4, 5]})
if df['a'] < 3:
pass
ValueError: The truth value of a Series is ambiguous. Use a.empty,
a.bool(), a.item(), a.any() or a.all().
Это потому, что df['a'] < 3
возвращает маску индексов, где значения в a
удовлетворяют условию < 3
:
print((df['a'] < 3).tolist())
# [True, True, False, False, False]
Вызывать bool
на это (что и делает по сути if
) не имеет никакого смысла.[True, True, False, False, False]
правда?это ложь?Это неоднозначно, как говорит ошибка.
Вам нужно переосмыслить логику этой функции и то, что вы на самом деле хотите, чтобы она возвращала в каком состоянии.