Ошибка значения: значение истинности кадра данных неоднозначно для оператора условного if

#python #pandas

Вопрос:

У меня возникла проблема с использованием фрейма данных для хранения данных инвентаризации и создания условного оператора if на основе того, содержит ли столбец строку («abc») и статус «доступно». Для одного и того же типа элемента может быть несколько строк, поэтому я считаю, что это часть проблемы, но не знаю, как с этим справиться. Я хочу отправить уведомление по электронной почте только в том случае, если имя элемента равно содержащейся строке и статус доступны.

 mergedf = pd.merge(df, df2)
         
item1 = mergedf[mergedf['name'].str.lower().str.contains("item1") amp; mergedf['status'].str.lower().str.contains("available")]
        
item2 = mergedf[mergedf['name'].str.lower().str.contains("item2") amp; mergedf['status'].str.lower().str.contains("available")]
        
item3 = mergedf[mergedf['name'].str.lower().str.contains("item3") amp; mergedf['status'].str.lower().str.contains("available")]
        
item4 = mergedf[mergedf['name'].str.lower().str.contains("item4") amp; mergedf['status'].str.lower().str.contains("available")]
        
print(item1)
print(item2) 
with open ("recipientlist.txt", "r ") as f:
      email_list = [line.strip() for line in f]
        for email in email_list:
            if email == "abc@gmail.com" and item1 or item2:
                        send_email()
                        print("email sent!")
            elif email == "xyz@gmail.com" and item3 or item4:
                        send_email()
                        print("email sent!")
            else:
                        print("no emails sent, nothing in stock")

Empty DataFrame
Columns: [sku, name, price, manufacturer, status, url, status check]
Index: []
       sku  ... status check
0  134463  ...         True
 

Обратная связь (последний последний звонок)
Ошибка значения: Значение истинности кадра данных неоднозначно. Используйте.empty,
a.bool(), a.item(), a.any() или a.all().

Комментарии:

1. Само по себе это не решение, но вы можете упростить свой код, сначала получив все доступные элементы, available_df = mergedf[mergedf.status == 'available'] а затем выполнив поиск имен элементов в новом фрейме данных. Кроме того, вместо str.lower().str.contains этого вы можете просто str.contains('item1', case=False) .

2. Хорошо, спасибо, я просто напишу код на основе ваших предложений.