问题:
例如在使用
ser1 = pd.Series([False, True, float("nan")])
ser1 = ser1.fillna(False)
时会出现下述警告。
FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set pd.set_option('future.no_silent_downcasting', True)
FutureWarning:已弃用在.fill、.fill、.bill上向下转换对象dtype数组,并将在未来的版本中进行更改。改为调用result.infer_objects(copy=False)。要选择加入未来的行为,请设置pd.set_option('future.nosilent_downcasting',True)
原因:
当前,Pandas 在处理 object
类型数组(通常是字符串类型)时,fillna()
、ffill()
和 bfill()
等方法会自动将 object
类型数组向下转换为更具体的类型,比如布尔型、整数型或浮点型。这种自动类型转换可能会在未来版本中被移除,导致不同的行为。
解决方法:
with pd.option_context("future.no_silent_downcasting", True):
ser1 = ser1.fillna(False).infer_objects(copy=False)
注意不要直接使用 pd.set_option('future.nosilent_downcasting',True) ,这可能会隐藏其他地方的问题。
不起作用的做法:
ser1.infer_objects(copy=False).fillna(False)
参考: