在使用 apply/pipe 时找出 lambda x 中 x 的 type/value

find out type/value of x in lambda x while using apply/pipe

当我在 Series/Dataframes 上使用 pipe/lambda 尝试编写代码时,我仍然 运行 出错,所以我想知道是否有办法调试我的代码以使其变得更好理解。 只是一个简单的例子: 我有一个系列:

s = pd.Series([10,20,30,40,50])

如果我想为每个元素添加一些数字,我可以使用:

s.apply(lambda x : x+5)
#or
s.pipe(lambda x : x+5)

两者都很好。 但是如果我想使用条件 lambda:

s.apply(lambda x : x+5 if x>20 else 0) # works

s.pipe(lambda x : x+5 if x>20 else 0) # doesn't work

我得到 ValueError,Series 的真实性不明确。如果我不知道为什么会在这里出现错误,我需要知道 x 是什么...... 这只是一个示例,与如何完成条件添加无关。我只想知道那里发生了什么,因此我需要在执行代码时知道什么是 x

这是我的问题。当处理更复杂的事情并且 运行 出错时,有没有一种方法可以在执行代码时随时调试我的代码以了解 lambda 中 x 的类型或值?例如打印语句?这将有助于理解为什么我有时会失败。

本例:

不同之处在于 apply 中的 x 是 Series 的 单个 元素,因为 lambda 函数应用于后一个元素另一个。来自 docs:

Parameters:
   func, function: Function to apply to each column or row.

pipe 的情况下,x 是系列本身,这就是条件 lambda 不起作用的原因(if x>20 没有意义)。从 pipe docs:

可以看出这一点
Parameters:
    func, function: Function to apply to the Series/DataFrame.

一般调试:

定义一个函数而不是使用 lambda 表达式,然后您可以根据需要添加打印语句:

def my_func(x):
    print(x)
    return x+5 if x>20 else 0


s.pipe(my_func)