首页 > 解决方案 > Series.replace() 不会根据替换更改 dtype

问题描述

在pandas中使用该Series.replace()方法时,如果不是所有要替换的值都存在于系列中,则将原始dtype值保留为该系列的数据类型。

我正在尝试用给定系列中的数值替换所有字符串值。如果我要替换的所有字符串都存在于系列中,则结果是带有int64 dtype. 但是,参数中列出的某些字符串在to_replace中不存在series,因为我正在编写的函数旨在转换可能包含该特定系列中其他类的其他数据样本;在这种情况下,新系列dtype保持为object,并且不会int64按预期更改为。

data['Functional'] = data.Functional.replace(['Typ', 'Min1', 'Min2', 'Mod', 'Maj1', 'Maj2', 'Sev', 'Sal'], [7, 6, 5, 4, 3, 2, 1, 0])

在上述情况下,系列中不存在“Sal”类;因此,结果是一个包含int从 1 到 7 的数字的序列(不包括 0,它是 'Sal' 的替换值)。如果我用“Sal”字符串替换系列中的一个随机单元格,然后运行命令,那么结果是一个包含numpy.int64值的系列。

我希望将结果系列指定为数字系列 ( int64),因此我可以根据它们的类型在我的数据框中选择系列。有谁知道我做错了什么?

标签: pythonpandasdataframe

解决方案


使用astype您可以定义您的系列数据类型:

data['Functional'] = data.Functional.replace(['Typ', 'Min1', 'Min2', 'Mod', 'Maj1', 'Maj2', 'Sev', 'Sal'], [7, 6, 5, 4, 3, 2, 1, 0]).astype(int)

推荐阅读