Электронная почта повторяет классификацию: ошибка в функции Python и условной инструкции - PullRequest
0 голосов
/ 11 декабря 2018

Я написал функцию python для проверки того, является ли почта повторной или новой на основании разницы в датах последней почты и текущей почты от клиента.

'Days_Difference' содержит числовые значения, например 0, 15 вместе с 'None'

Функция определяется следующим образом:

def Status(df['Days_Difference']):
    if(df['Days_Difference'] < 30):
         return 'repeat'
    elif(df['Days_Difference'] > 30):
         return 'fresh'
    else:
         return 'not in list'

Я получаю ошибку:

'<' не поддерживается между 'Типы str 'и' int '</p>

Я попытался df['Days_Difference'] = int(df['Days_Difference']), но это не сработало.

Я также попытался df['Days_Difference'] = pd.numeric(df['Days_Difference']), но это также не сработало.

Я ищу решение!

1 Ответ

0 голосов
/ 11 декабря 2018

(я предполагаю, что 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] правда?это ложь?Это неоднозначно, как говорит ошибка.

Вам нужно переосмыслить логику этой функции и то, что вы на самом деле хотите, чтобы она возвращала в каком состоянии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...