用数值替换字符串曾经很容易,但从 pandas 2.2 开始,下面的简单方法会引发警告。现在这样做的“正确”方法是什么?
>>> s = pd.Series(["some", "none", "all", "some"])
>>> s.dtypes
dtype('O')
>>> s.replace({"none": 0, "some": 1, "all": 2})
FutureWarning: Downcasting behavior in `replace` is deprecated and will be
removed in a future version. To retain the old behavior, explicitly call
`result.infer_objects(copy=False)`. To opt-in to the future behavior, set
`pd.set_option('future.no_silent_downcasting', True)`
0 1
1 0
2 2
3 1
dtype: int64
如果我正确理解了警告,则对象 dtype 会“向下转换”为 int64。也许 pandas 希望我明确执行此操作,但我不知道如何在替换发生之前将字符串向下转换为数字类型。
当你运行时:
输出的 dtype 目前为
int64
,因为 pandas 推断这些值都是整数。在未来的 pandas 版本中,这种情况将不会再自动发生,dtype 将保留
object
(您仍然会有整数,但作为对象,而不是 int64):您必须明确将对象转换为整数(替换后):