在pandas v.1.5.0中,增加了一个新的警告,当一个列被从不同的dtype数组中设置时,FutureWarning
会显示出来。当使用iloc
时,FutureWarning
会通知一个计划中的语义变化:在未来的版本中,更改将就地完成。更改日志指示如何获得旧的行为,但没有提示如何处理这种情况,而就地操作实际上是正确的选择。
更改日志中的示例:
df = pd.DataFrame({'price': [11.1, 12.2]}, index=['book1', 'book2'])
original_prices = df['price']
new_prices = np.array([98, 99])
df.iloc[:, 0] = new_prices
df.iloc[:, 0]
这是Pandas1.5.0中打印的警告:
未来警告:在未来的版本中,df.iloc[:, i] = newvals
将尝试在原处设置值,而不是始终设置新数组。要保留旧行为,请使用df[df.columns[i]] = newvals
,如果列不唯一,则使用df.isetitem(i, newvals)
如果我不关心是否在适当的位置,但想摆脱警告,如何摆脱警告?我应该显式地改变dtype吗?我真的需要每次使用这个特性时都捕捉警告吗?没有更好的方法吗?
4条答案
按热度按时间pqwbnv8z1#
我还没有找到比使用
warnings
模块抑制警告更好的方法:3vpjnl9f2#
因为我还不能发表评论,所以在这里发帖。
现在我想我也会抑制警告,因为我不想要旧的行为,从来没有想过要这样使用它。
dtcbnfnu3#
如changelog所述,当使用不同的dtype* 设置数组 * 中的整列时,会打印警告,因此调整dtype是一种使其静默的方法:
注意额外的
.astype(float)
。不是理想的解决方案,但是一个解决方案。sgtfey8w4#
我只是暂时过滤所有未来的警告: