我可以从条件函数返回多个值并分别打印它们吗?



我想从函数返回多个值并分别打印它们(而不是作为元组)。多重返回是简单的函数(第一部分od代码是可以的),但我不能在条件函数中返回两个值。我可以返回多个值并分别打印它们(对于第二部分)吗?

dataset = {'A': [6, 2, 3, 4, 5, 5, 7, 8, 9, 7],
'B': [5, 1, 2, 3, 4, 4, 6, 7, 8, 6],
'C': [0, 1, 0, 1, 1, 0, 1, 0, 1, 0]}
data = pd.DataFrame(dataset)
#this part of code is ok to return muntiple values
def quanta(): 
return ((data['A']+data['B']),(data['A']-data['B']))
a, b = quanta()
print(a)
print(b)
#I want to return two values a and b  with the if condition. I just add the if statement to the above code it doesn't work.
def quanta(): 
if data['C'] > 0:
return ((data['A']+data['B']),(data['A']-data['B']))
a, b = quanta()
print(a)
print(b)
#ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), #a.any() or a.all().

try this:

import pandas as pd

dataset = {
'A': [6, 2, 3, 4, 5, 5, 7, 8, 9, 7],
'B': [5, 1, 2, 3, 4, 4, 6, 7, 8, 6],
'C': [0, 1, 0, 1, 1, 0, 1, 0, 1, 0]
}
df = pd.DataFrame(dataset)
print(df)

# this part of code is ok to return muntiple values
def quanta1(data):
return data['A']+data['B'], data['A']-data['B']

a, b = quanta1(df)
print(a)
print(b)

# I want to return two values a and b  with the if condition
def quanta2(data):
data = data[data["C"] > 0]
return data['A']+data['B'], data['A']-data['B']

a, b = quanta2(df)
print(a)
print(b)

正如在注释中指出的那样,您面临的第一个问题是您不能将Series强制为if语句求值所需的单个布尔值。这就是错误信息所指示的:

ValueError:一个Series的真值是不明确的。使用a.empty a.bool (), a.item (), a.any()或所有()

如果您试图在某些汇总统计为真时运行操作,您可以使用这些缩减之一,例如

def quanta(data):
if (data['C'] > 0).any():
return ((data['A']+data['B']),(data['A']-data['B']))

一旦您解决了这个问题,您仍然会遇到a, b = quanta()可能导致问题的情况,因为如果条件不满足,quanta将返回None

可以通过处理函数返回的可能情况来处理这个问题。如果quanta中的条件为False,则返回None。所以在你的代码中处理它:

quanta_result = quanta()
if quanta_result is not None:
a, b = quanta_result

另一方面,如果你实际上试图执行一个元素操作,你可能会寻找像Series.where这样的东西?你可以做各种遮罩操作,例如:

def quanta(data):
# in rows where C > 0, return A + B, and return A - B elsewhere
return (data["A"] + data["B"]).where(
data["C"] > 0, 
(data["A"] - data["B"]),
)

这只是一个例子,我不确定你要什么。

最新更新