将lambda函数传递给DataFrame.apply-这是怎么回事?

时间:2018-11-16 06:05:05

标签: python pandas

我的问题是关于线路

df.apply(lambda x: pd.to_numeric(x, errors='coerce'))

我确实知道该语句将dataframe列转换为整数值,但无法理解lambda函数或errors='coerce'部分的用法。

1 个答案:

答案 0 :(得分:3)

apply通过对行或列系列应用函数来工作。 lambda只是定义一个匿名函数。

为了便于阅读,您可以定义具有更好变量名称的常规函数​​。考虑以下演示:

>>> df = pd.DataFrame([['1', '2'], ['3', 'foo']])
>>> df.dtypes
>>> 
0    object
1    object
dtype: object

我们有一个充满字符串的数据框,我们希望将其设为数字​​。不可转换的值应设置为NaN(这就是errors='coerce'的作用)。

>>> def make_numeric(series):
...:    return pd.to_numeric(series, errors='coerce')
>>> 
>>> new_df = df.apply(make_numeric)
>>> 
>>> new_df
>>> 
   0    1
0  1  2.0
1  3  NaN
>>> 
>>> new_df.dtypes
>>> 
0      int64
1    float64
dtype: object

如您所见,使用lambda只是定义函数的一种简短方法。如果您不喜欢它,则总是可以编写一个普通的函数来执行相同的操作,并且可读性更高。

在这种情况下,定义自己的函数是没有意义的,因为您可以编写:

>>> df.apply(pd.to_numeric, errors='coerce')
>>> 
   0    1
0  1  2.0
1  3  NaN