首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不传递参数的Lambda函数

不传递参数的Lambda函数
EN

Stack Overflow用户
提问于 2019-10-15 09:51:34
回答 2查看 125关注 0票数 2

我有一个用‘1’和‘2’列组成一些随机的ints的示例数据some。我试图更深入地理解一些具有lambda函数的代码,并对代码似乎神奇地工作而没有提供要传递给lambda函数的参数感到困惑。

最初,我正在创建一个新的列'newcol‘,其中包含熊猫assign()方法,并将df传递到一个显式lambda函数func(df)中。函数返回df 'one‘列的日志:

代码语言:javascript
运行
复制
df=df.assign(newcol=func(df))

到目前一切尚好。

然而,令我困惑的是,代码在不传递df的情况下也能工作。

代码语言:javascript
运行
复制
df=df.assign(newcol2=func)

即使我没有将(df)传递到lambda函数中,它也正确地执行了该操作。解释器如何知道df被传递到lambda函数?

下面的示例代码和输出:

代码语言:javascript
运行
复制
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(1,10,size=16).reshape(8,2),columns=["one","two"])
func=lambda x: np.log(x.one)
df=df.assign(newcol=func(df))
print(df)

#This one works too, but why?
df=df.assign(newcol2=func)
print(df)
代码语言:javascript
运行
复制
Output:
   one  two    newcol   newcol2
0    1    8  0.000000  0.000000
1    6    7  1.791759  1.791759
2    2    6  0.693147  0.693147
3    2    8  0.693147  0.693147
4    4    2  1.386294  1.386294
5    9    3  2.197225  2.197225
6    2    2  0.693147  0.693147
7    4    7  1.386294  1.386294

(请注意,我本可以使用lambda内嵌的赋值,但为了清晰起见,这里可以将其显式化。)

EN

Stack Overflow用户

回答已采纳

发布于 2019-10-15 10:02:37

如果您使用pd.DataFrame.assign()并传递一个callable,那么它假设第一个参数实际上是dataframe本身。

例如,如果将代码更改为以下内容:

代码语言:javascript
运行
复制
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(1,10,size=16).reshape(8,2),columns=["one","two"])
func=lambda c, x: np.log(x.one + c)
df=df.assign(newcol=func(1, df))
print(df)

#This one will no longer work!
df=df.assign(newcol2=func)
print(df)

assign()的最后一次调用将无法工作。

这在正式文件中得到了解释。行df.assign(newcol=func(1, df))使用不可调用的路径,而行df.assign(newcol=func)使用可调用的路径.

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58391882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档