Python - Pandas: 基于列值的 IF 语句
Python - Pandas: IF statement based on column values
我正在尝试开发一个 IF 语句,它将
- 运行 另一个 python 脚本,如果 [列名] 中的值等于零。
- 否则什么也不做。
我最初的想法是做类似
的事情
if df['column name'] == 0:
subprocess.call("python script.py", shall = True)
其他:
print('No values of 0')
这给了我以下错误:ValueError:系列的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
如果我尝试指定其中任何一个,我并没有真正得到我想要的。
具体来说,我希望脚本遍历特定列的值,并查看这些值中是否有任何值 = 0,如果是,我想 运行 另一个向我发送电子邮件的脚本警告。
抱歉,如果这已经在其他地方解释过,但我找不到它。
我在
Python 3.7.5 并使用 pandas.
感谢您的帮助
我这里有两个片段可能会对您有所帮助:
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"
如果任何值等于 0
,您需要使用 .any
来计算整个系列,因为您希望它等于 True
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
我正在尝试开发一个 IF 语句,它将 - 运行 另一个 python 脚本,如果 [列名] 中的值等于零。 - 否则什么也不做。
我最初的想法是做类似
的事情if df['column name'] == 0:
subprocess.call("python script.py", shall = True)
其他:
print('No values of 0')
这给了我以下错误:ValueError:系列的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
如果我尝试指定其中任何一个,我并没有真正得到我想要的。
具体来说,我希望脚本遍历特定列的值,并查看这些值中是否有任何值 = 0,如果是,我想 运行 另一个向我发送电子邮件的脚本警告。
抱歉,如果这已经在其他地方解释过,但我找不到它。
我在 Python 3.7.5 并使用 pandas.
感谢您的帮助
我这里有两个片段可能会对您有所帮助:
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"
如果任何值等于 0
,您需要使用.any
来计算整个系列,因为您希望它等于 True
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