将多个变量类型转换为Series对象(DataFrame列)

16 浏览
0 Comments

将多个变量类型转换为Series对象(DataFrame列)

我的问题解释

以这个DataFrame为例:

pd.DataFrame(
    data = np.array([
        ['A','1'],
        ['B','2'],
        ['C', 'False'],
    ])
)

有没有一种好方法可以将第二列的元素类型适当地设置为float或boolean?

我只是给出了初始为字符串的DataFrame。实际上,我有大量的行,每个DataFrame都不同,所以需要设置为float和bool的索引会发生变化。因此,我无法创建一个默认的dtype模板来参考。

我探索过的解决方案

  • pandas确实有df.to_numeric()函数,但你只能通过设置errors='coerce'将非float设置为Nan,所以这不起作用。df.astype()函数也有类似的问题
  • 我可以循环遍历每个索引,尝试类型转换,直到有一个成功,但这不够优雅,所以我觉得应该有更好的方法

总结

本质上,给定一个元素初始为字符串类型的系列对象,我需要将适当的元素转换为float或bool类型。有没有一种优雅的方法可以在不循环遍历每个元素并转换为float或bool的情况下实现?我是否遗漏了某个pandas函数?

提前感谢您的任何帮助!

0
0 Comments

问题的出现原因:

在给定的DataFrame中,有多种数据类型的变量需要转换为Series对象。其中,包括布尔类型以及有效的浮点数。

解决方法:

可以使用lambda函数迭代DataFrame的行,并进行类型转换。具体操作如下:

df[1] = df.apply(lambda row: bool(row[1]) if (row[1] == 'False' or row[1] == 'True') else float(row[1]), axis=1)

以上代码将在DataFrame的第一列中进行操作,并根据条件判断将变量转换为布尔类型或浮点类型。执行结果如下:

>>> df[1][0].type

>>> df[1][1].type

>>> df[1][2].type

通过以上方法,我们可以将多种数据类型的变量转换为Series对象(DataFrame列)。

0