1

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)

我认为这个警告不会影响我对 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

任何建议表示赞赏。

4

2 回答 2

5

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 版本无关,但与您正在使用的版本有关pandasPandas是第三方库,不是 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-27T08:36:48.303 回答
0

不要担心未来的警告,它不会以任何方式影响您的代码。但是尽量避免这种警告,因为将来这个警告将不会显示,而是会在 pandas 更新时给出错误。这就是它显示未来警告的原因。

于 2021-08-27T09:05:51.783 回答