繁体   English   中英

如何在应用 function 中使用 df.astype()

[英]How do I use df.astype() inside apply function

我有一个数据框,其中列中的所有数据都是 object 类型。 现在我想使用 astype() function 将所有对象转换为数字类型,但我不想做这样的事情->

df.astype({'col1': 'int32', 'col2': 'int32'....})

如果我做这样的事情->

在此处输入图像描述

我收到一个错误,因为 apply function 需要 Series 遍历。

PS:做同样事情的另一个选择是->

df.apply(pd.to_numeric)

但是我想使用.astype() 来做这个有没有其他方法可以代替使用 df.apply() 并且仍然使用 df.astype() 将所有 object 类型数据转换为数字

使用df = df.astype(int)将所有列转换为 int 数据类型

import numpy

df.astype(numpy.int32)

如果这些是object列,并且您确定它们可以“软转换”为 int,那么您有两个选择:

df
  worker day    tasks
0      A   2     read
1      A   9    write
2      B   1     read
3      B   2    write
4      B   4  execute

df.dtypes

worker    object
day       object
tasks     object
dtype: object

pandas <= 0.25

如果可能, infer_objects (仅限 0.21+)将您的数据转换为 numpy 类型。

df.infer_objects().dtypes

worker    object
day        int64
tasks     object
dtype: object

pandas >= 1.0

如果可能, convert_dtypes会将您的数据转换为最具体的 pandas 扩展数据类型。

df.convert_dtypes().dtypes

worker    string
day        Int64
tasks     string
dtype: object

有关“硬”与“软”转换的更多信息,另请参阅我的这个答案

在我看来,最安全的方法是在您的apply程序 function 中使用pd.to_numeric ,它还允许您进行错误操作、 coerceraiseignore 将列转换为数字后,您可以安全地执行astype()操作,但我不建议以以下方式开始:

df.apply(pd.to_numeric, errors='ignore')

如果该列不能转换为数字,它将保持不变

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

列将转换为数字,列中无法转换为数字的值将替换为NaN

df.apply(pd.to_numeric, errors='raise')

如果无法将列转换为数字,将返回ValueError

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM