Python - Pandas: оператор IF на основе значений столбца - PullRequest
1 голос
/ 29 марта 2020

Я пытаюсь разработать оператор IF, который будет - Выполнять другой сценарий python, если в [Имя столбца] есть значения, равные нулю. - Иначе ничего не делать.

Моя первоначальная мысль заключалась в том, чтобы сделать что-то вроде

if df ['имя столбца'] == 0:

subprocess.call("python script.py", shall = True)

else:

print('No values of 0')

Это дает мне следующую ошибку: ValueError: Значение истинности Серии неоднозначно. Используйте a.empty, a.bool (), a.item (), a.any () или a.all ().

Если я пытаюсь указать любой из них, я не получаю то, хотеть.

Для уточнения c Я хочу, чтобы скрипт перебрал значения определенного столбца c и посмотрел, равно ли любое из этих значений = 0, и если это так, я хочу запустить другой скрипт, который отправляет мне предупреждение по электронной почте.

Извините, если это уже было объяснено в другом месте, но я не могу его найти.

Я на Python 3.7.5 и использую pandas.

Спасибо за помощь

Ответы [ 2 ]

2 голосов
/ 29 марта 2020

вам нужно использовать .any для расчета всей серии так, как вы хотите, чтобы она равнялась True, если любое из значений равно 0

df = pd.DataFrame({'count' : [0,1,2,3]})

print(df)

   count
0      0
1      1
2      2
3      3

if df['count'].eq(0).any():
    print('do sth')
else:
    print('pass')

out:

do sth
0 голосов
/ 29 марта 2020

У меня есть два фрагмента, которые могут вам помочь:

import pandas as pd
import numpy as np

df = pd.DataFrame()
df['Random_Numbers'] = np.random.randn(10)

Первый вариант:

# First: filter the list, check if it's empty, send a single email. 

if df[df['Random_Numbers'] > 0.0].empty == False:
    print('Sending Email....Email Sent')

Вывод:

"Sending Email....Email Sent"

------------------------------------------------------------------------------

Второй вариант:

# Second: iterate over each row in the dataframe, like you mentioned, check the value, send an email zero to multiple times. 

for index, row in df.iterrows():
    if row['Random_Numbers'] > 0.0:
        print('Sending Email...Email Sent')  

Выход:

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