当你使用Tiingo+pandas_datareader时,有没有人遇到这个FutureWarning
?
警告如下:
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)
我认为这个警告不会影响我对tiingo数据的访问,因为我可以获得我想要的所有数据。我只想知道我当前的代码是否有任何风险:
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
任何建议都是值得感谢的。
发布于 2021-08-27 08:36:48
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
消息与您正在使用的pandas
版本无关,但与您正在使用的python版本有关。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)
。他们最有可能考虑做出这样的改变,因为使用关键字参数调用函数通常对其他人来说更清晰和更易读。
发布于 2021-08-27 09:05:52
不要担心将来的警告,它不会以任何方式影响你的代码。但是尽量避免这种警告,因为在未来,这个警告不会显示出来,而是会在pandas更新时给出错误。这就是它显示未来警告的原因。
https://stackoverflow.com/questions/68917844
复制相似问题