python - 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
),因此我可以根据它们的类型在我的数据框中选择系列。有谁知道我做错了什么?
解决方案
使用astype
您可以定义您的系列数据类型:
data['Functional'] = data.Functional.replace(['Typ', 'Min1', 'Min2', 'Mod', 'Maj1', 'Maj2', 'Sev', 'Sal'], [7, 6, 5, 4, 3, 2, 1, 0]).astype(int)
推荐阅读
- jenkins - Rancher 容器默认以 {"NetworkDisabled": true} 开头
- python - OperationalError:没有这样的列:a
- android - 我们如何使用谷歌智能锁实现生物识别登录?
- c++ - 初始数据之间的cpp数组差异
- python - Appium ios - 未知设备或模拟器 UDID 错误
- javascript - 如何在 div 中淡入文本,同时在 JavaScript 中解扰文本
- java - 模拟 Java 11 HttpClient
- c# - 使用 Selenium C# 单击输入复选框
- python - 如何在 Blogger 上部署 Python、Flask 应用程序?
- javascript - Api 信息未显示在浏览器 Angular 中