自 2.2.0 版本起,Pandas 替换并弃用了 dowcasting

问题描述 投票:0回答:1

用数值替换字符串曾经很容易,但从 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

如果我正确理解了警告,则对象数据类型将“向下转换”为 int64。也许 pandas 希望我明确地执行此操作,但我不知道如何在替换发生之前将字符串向下转换为数字类型。

python pandas types replace
1个回答
0
投票

跑步时:

s.replace({"none": 0, "some": 1, "all": 2})

输出的数据类型当前为 int64,因为 pandas 推断这些值都是整数。在未来的 pandas 版本中,这种情况不会再发生,您必须显式地将对象向下转换为整数:

s.replace({"none": 0, "some": 1, "all": 2}).infer_objects(copy=False)
© www.soinside.com 2019 - 2024. All rights reserved.