有人遇到这样的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)
来代替。他们最有可能考虑做这个改变,因为调用带有关键字参数的函数对其他人来说通常更清晰、更易读。