【发布时间】:2018-11-16 06:05:05
【问题描述】:
我的问题是关于这条线的
df.apply(lambda x: pd.to_numeric(x, errors='coerce'))
我确实了解此语句将数据框列转换为整数值,但无法理解 lambda 函数或 errors='coerce' 部分的用法。
【问题讨论】:
-
要了解错误部分,请参阅doc
我的问题是关于这条线的
df.apply(lambda x: pd.to_numeric(x, errors='coerce'))
我确实了解此语句将数据框列转换为整数值,但无法理解 lambda 函数或 errors='coerce' 部分的用法。
【问题讨论】:
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'。)