"function()"和"function"的区别

  • 本文关键字:function 区别 python pandas
  • 更新时间 :
  • 英文 :


我看到

  1. df["col2"] = df["col1"].apply(len)
  2. len(df["col1"])

我的问题是,

  • 为什么使用";CCD_ 3";函数在1中不带括号,但在2中带括号使用?

  • 两者之间有什么区别?

我经常看到这种情况,使用带括号和不带括号的函数。有人能向我解释一下到底发生了什么吗?

谢谢。

您提到的第一个示例(上面的代码(将函数len映射到目标变量df["col1"]

df["col2"] = df["col1"].apply(len)

每当我们必须将函数映射到任何可迭代的对象时,语法需要函数为且不带括号。在您的情况下,df["col1"]必须具有可以计算长度的元素。它将返回Pandas系列所有元素的遗嘱长度。以下面的例子为例。

a = ["1", "2","3","4"]
z = list( map( int, a ) )  >> [1, 2, 3, 4]

在这里,我们将内置的int函数(用于进行类型转换(映射到整个列表。

您提到的第二个例子将给出df["col1"]系列的长度

len(df["col1"])

它不会对该系列中的元素执行任何操作。以下面的例子为例。

a = ["1", "2","3","4"]
z = len(a)  >> 4

由于在这两种情况下,函数len都被提供了一个可迭代的对象,因此它没有给出任何错误。但是,正如我所解释的,输出完全不同!

在1中,函数len被传递给一个名为apply的方法。该方法可能会沿第一个轴应用函数len(可能返回类似长度列表的内容(。在2中,函数len被直接调用,参数为df["col2"],大概是为了获得数据帧的长度。

1中的用法有时被称为"1";"高阶函数";,但原则上,它只是将一个函数传递给另一个函数以供其使用。

在第二种情况下,您直接调用len方法,并将得到结果,即df中col1中有多少行。

在第一个例子中,您将len函数的引用提供给apply函数。这是df["col2"] = df["col1"].apply(lambda x: len(x))的快捷方式如果您想让方法的用户交上函数来影响算法的某些部分,从而使方法的行为变得灵活,则可以使用此版本。就像这里的apply方法一样。根据列中的锥角,你想用一些东西填充新列,这里决定用其他列的内容长度来填充。

len(s(将返回s变量的长度

len将返回函数itslelf。所以如果我做a=len,那么我就可以做a(s(。当然,不建议做a=len这样的事情。

让我们看看DataFrame.apply的文档:它的第一个参数是CCD_ 11,这是一个我们将应用于CCD_。在您的情况下,此函数为len()

现在,让我们看看当您将len作为带括号的参数传递时会发生什么:

df.apply(len()) 
-----------------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/tmp/ipykernel_11920/3211016940.py in <module>
----> 1 df.apply(len())
TypeError: len() takes exactly one argument (0 given)

而当我们使用CCD_ 15时,这是非常有效的。
这是因为您的参数必须是function,Python用于区分函数的方法是,函数调用的返回值在第二种情况下使用括号。

最新更新