Pandas “.convert_objects(convert_numeric=True)” 已被弃用
在本文中,我们将介绍Pandas中一个重要的函数被弃用的消息:”.convert_objects(convert_numeric=True)”。我们将解释它是什么、为什么它被弃用以及如何正确地更新你的代码。
阅读更多:Pandas 教程
“.convert_objects(convert_numeric=True)” 是什么?
“.convert_objects(convert_numeric=True)” 是 Pandas 中的一个函数,它被用来将数据框中的列转换为数值类型。这个函数在 Pandas 0.17.0 版本中被引入,这时候,它被认为是一个很方便的工具,可以快速地把所有的列转换为需要的类型。它会扫描数据框中的每一列,尝试将其转换为数值类型,如果成功,就返回转换后的值,否则就返回原始值。
以下是一个简单的示例,展示了如何使用 “.convert_objects(convert_numeric=True)” 函数将数据框中的所有列转换为数值类型。
import pandas as pd
df = pd.DataFrame({'a': ['1', '2', '3'], 'b': ['4', '5', '6']})
print(df.dtypes)
df = df.convert_objects(convert_numeric=True)
print(df.dtypes)
上述代码会输出以下内容:
a object
b object
dtype: object
a int64
b int64
dtype: object
可以看到,当我们使用 “.convert_objects(convert_numeric=True)” 函数后,数据框的类型从 object 类型转换为了 int64 类型。
然而,从 Pandas 0.20.0 版本开始,这个函数被标记为废弃,并在 Pandas 1.0.0 版本中正式被移除。
为什么 “.convert_objects(convert_numeric=True)” 被弃用?
“.convert_objects(convert_numeric=True)” 函数存在一些缺陷,这导致了它被废弃。主要原因有三:
- 预期外的行为:如果数据框中的某些列无法被转换为数值类型,该函数会将这些列留在 object 类型中,而不是抛出一个错误。这种行为可能会导致预期外的结果,因为 object 类型的列会导致很多计算问题。
-
速度慢:在处理大型数据框时,”.convert_objects(convert_numeric=True)” 函数的速度表现不佳,这会影响数据处理的效率。
-
难以维护:由于这个函数是在没有明确类型信息的情况下进行转换的,因此代码维护起来可能会比较困难。
因此,尽管 “.convert_objects(convert_numeric=True)” 函数可以在某些情况下很方便地将列转换为数值类型,但它的一些缺陷使得它被标记为废弃。
如何正确地更新你的代码?
如果你的代码中使用了 “.convert_objects(convert_numeric=True)” 函数,你应该将其替换为 “.to_numeric()” 函数,它是 “.convert_objects(convert_numeric=True)” 的升级版。
“.to_numeric()” 函数的行为与 “.convert_objects(convert_numeric=True)” 函数类似,但它可以处理更多的类型,并且提供了更多的选项来处理非数值字符串。以下是一个简单的示例,展示了如何使用 “.to_numeric()” 函数将数据框中的所有列转换为数值类型。
import pandas as pd
df = pd.DataFrame({'a': ['1', '2', '3'], 'b': ['4', '5', '6']})
print(df.dtypes)
df = df.apply(pd.to_numeric, errors='coerce')
print(df.dtypes)
上述代码会输出以下内容:
a object
b object
dtype: object
afloat64
b float64
dtype: object
可以看到,当我们使用 “.to_numeric()” 函数后,数据框的类型从 object 类型转换为了 float64 类型。
需要注意的是,”.to_numeric()” 函数需要你显式地指定错误处理方式,因为它会在转换失败时抛出一个错误。错误处理方式有三种:
- ‘raise’(默认):如果转换失败,抛出一个 ValueError 错误。
- ‘coerce’:将转换失败的值替换为 NaN。
- ‘ignore’:保留原始值。
在大多数情况下,我们建议使用 “errors=’coerce'” 选项,这样可以将转换失败的值替换为 NaN,避免对计算造成影响。
总结
“.convert_objects(convert_numeric=True)” 函数是 Pandas 中一个被废弃的函数,它可以将数据框中的列转换为数值类型。然而,这个函数存在一些缺陷,导致它被标记为废弃。如果你的代码中使用了 “.convert_objects(convert_numeric=True)” 函数,我们建议你将其替换为 “.to_numeric()” 函数,这是一个更好的选择。”.to_numeric()” 函数提供了更多的选项来处理非数值字符串,并且具有更高的效率。
极客教程