Series.replace()不会根据替换更改dtype

时间:2019-05-07 15:08:51

标签: python pandas dataframe

在熊猫中使用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),因此我可以根据数据帧的类型选择序列。有人知道我在做什么错吗?

1 个答案:

答案 0 :(得分:0)

使用astype可以定义系列dtype:

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