在使用 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)
当我在 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)