我的问题是关于线路
df.apply(lambda x: pd.to_numeric(x, errors='coerce'))
我确实知道该语句将dataframe列转换为整数值,但无法理解lambda
函数或errors='coerce'
部分的用法。
答案 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