将多个变量类型转换为Series对象(DataFrame列)
将多个变量类型转换为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函数?
提前感谢您的任何帮助!
问题的出现原因:
在给定的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列)。