为什么我会收到Pandas的“未来警告”?

2024-09-29 23:25:14 发布

您现在位置:Python中文网/ 问答频道 /正文

当您使用Tiingo+pandas\u 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的真实“未来版本”: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

任何建议都将不胜感激


Tags: of数据代码py警告pandaspytestversion
2条回答

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

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消息与您正在使用的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)。他们很可能会考虑进行此更改,因为使用关键字参数调用函数通常更清晰,对其他人来说更可读

相关问题 更多 >

    热门问题