我最近将我的
pandas
从 v1.x 升级到 v2.x。 然而,使用数据透视表执行合理操作的代码会生成一组令人讨厌的未来警告。
(Pdb) df = pd.DataFrame([["a", 1], ["a", 2], ["b", 3]], columns=["col1", "col2"])
(Pdb) df
col1 col2
0 a 1
1 a 2
2 b 3
(Pdb) df.pivot_table(index="col1", values="col2", aggfunc=np.sum)
<stdin>:1: FutureWarning: The provided callable <function sum at 0x102bcb2e0> is currently using DataFrameGroupBy.sum. In a future version of pandas, the provided callable will be used directly. To keep current behavior pass the string "sum" instead.
col2
col1
a 3
b 3
正是那个奇怪的 FutureWarning 让我感到困惑/烦恼。 事实上我并没有通过
DataFrameGroupBy.sum
;我通过了np.sum
。 (也许在幕后,第一个是第二个的别名)。此外,我想要可以直接使用可调用对象。 这就是为什么我通过了!
stackoverflow 的两个问题:
[A] 我真的不想在这里传递字符串“sum”;我认为我传递自己的可调用对象应该没问题。 有没有正确的方法可以做到我没有做的事情?
[B] 如何在代码范围内抑制此特定警告?
我知道如何使用以下方法抑制单个代码块的警告:
with warnings.catch_warnings():
warnings.simplefilter(action='ignore', category=FutureWarning)
但我到处都使用
pivot_table
,每次都使用 with
上下文会很疯狂。 我也可以在我的代码库中阻止 FutureWarning
,但其他 FutureWarning
实际上很有用。
如何抑制此特定警告?
我尝试使用 Python 3.10 和 pandas 2.2.3 重现该警告。添加以下代码后,警告消失:
import warnings
warnings.filterwarnings(
'ignore',
category=FutureWarning,
message="The provided callable <function sum"
)
filterwarnings
函数设置为捕获 FutureWarning
消息,而代码中可能出现的其他警告仍会显示