为什么我会在 pandas.concat 上收到"未来警告"?



有人遇到这样的FutureWarning吗?当我使用Tiingo+pandas_datareader时,我得到了这个?

警告如下:

python3.8/site-packages/pandas_datareader/tiingo.py:234: FutureWarning: In a future version of pandas all arguments of concat except for the argument 'objs' will be keyword-only
return pd.concat(dfs, self._concat_axis)

我认为这个警告不会影响我访问pandas数据(在我的情况下,我从tiingo api获取),我可以得到我想要的所有数据没有问题。我只是想了解一下我现在的环境是否有风险:

my python3                -  3.8.5, 
Python 3.8.5, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
pandas_datareader version -  0.10.0
pandas version            -  1.3.2
然后我用python的'futureVersion': 3.9.6(与python 3.8.5相比)测试了我的代码。令我惊讶的是,我不再得到任何警告或错误,一切正常:

下面是更新的细节

platform win32 
- Python 3.9.6, pytest-6.2.4, py-1.10.0, pluggy-0.13.1

请多多指教。

python中的大多数函数形参都是"位置或关键字"参数。

。如果我有这个函数:

def do_something(x, y):
pass

我可以这样调用它,使用位置参数:

do_something(1, 2)
或者像这样,使用关键字参数:
do_something(x=1, y=2)

或者像这样,使用两者的混合(但请注意,关键字参数后不允许有位置参数):

do_something(1, y=2)

但是你也可以定义只有位置或只有关键字参数的函数

假设我有另一个函数:

def do_something_else(x, /, y, *, z):
pass

在这个函数中,我将x标记为仅限位置的,因为它在/之前。我把z标记为仅关键字,因为它在*之后。y是位置或关键字参数,因为它在/之后,但在*之前。这意味着调用函数的这两次尝试将失败:第一次是因为z作为位置参数被调用,第二次是因为x作为关键字参数被调用:

do_something_else(1, 2, 3)       # will fail!
do_something_else(x=1, y=2, z=3) # will fail!

然而,这两次尝试都将成功-y仍然是一个位置或关键字参数。

do_something_else(1, 2, z=3)     # fine
do_something_else(1, y=2, z=3)   # fine

' FutureWarning '消息。

FutureWarning消息与您正在使用的python版本无关,但与您正在使用的pandas版本有关。Pandas是一个第三方库,不是python核心的一部分,所以你使用的pandas版本和你使用的python版本是完全不同的。

这个警告是让你知道,目前你可以写pd.concat(dfs, self._concat_axis),但是他们计划在pandas的未来版本中改变函数的定义,这样除了objs之外的所有参数都将是关键字。也就是说,在他们做了这个改变之后,pd.concat(dfs, self._concat_axis)将引发一个错误,你将不得不写pd.concat(dfs, axis=self._concat_axis)来代替。他们最有可能考虑做这个改变,因为调用带有关键字参数的函数对其他人来说通常更清晰、更易读。

最新更新