【问题标题】:Passing a lambda function to DataFrame.apply - what's happening here? [duplicate]将 lambda 函数传递给 DataFrame.apply - 这里发生了什么? [复制]
【发布时间】:2018-11-16 06:05:05
【问题描述】:

我的问题是关于这条线的

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

我确实了解此语句将数据框列转换为整数值,但无法理解 lambda 函数或 errors='coerce' 部分的用法。

【问题讨论】:

  • 要了解错误部分,请参阅doc

标签: python pandas


【解决方案1】:

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

【讨论】:

  • (特别是df.astype 有一个errors 参数,但它不能是'coerce'。)
猜你喜欢
  • 2020-03-12
  • 1970-01-01
  • 1970-01-01
  • 2017-04-01
  • 2021-12-26
  • 2012-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多