首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我用pandas.concat得到一个'FutureWarning‘?

为什么我用pandas.concat得到一个'FutureWarning‘?
EN

Stack Overflow用户
提问于 2021-08-25 06:27:14
回答 2查看 3K关注 0票数 1

当你使用Tiingo+pandas_datareader时,有没有人遇到这个FutureWarning

警告如下:

代码语言:javascript
运行
复制
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数据的访问,因为我可以获得我想要的所有数据。我只想知道我当前的代码是否有任何风险:

代码语言:javascript
运行
复制
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相比)。令我惊讶的是,我没有收到任何警告或错误:

代码语言:javascript
运行
复制
platform win32 -- Python 3.9.6, pytest-6.2.4, py-1.10.0, pluggy-0.13.1

任何建议都是值得感谢的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-27 08:36:48

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

也就是说,如果我有这个函数:

代码语言:javascript
运行
复制
def do_something(x, y):
    pass

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

代码语言:javascript
运行
复制
do_something(1, 2)

或者像这样,使用关键字参数:

代码语言:javascript
运行
复制
do_something(x=1, y=2)

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

代码语言:javascript
运行
复制
do_something(1, y=2)

但也可以使用仅限位置或仅限关键字的参数来定义函数

假设我有另一个函数:

代码语言:javascript
运行
复制
def do_something_else(x, /, y, *, z):
    pass

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

代码语言:javascript
运行
复制
do_something_else(1, 2, 3)       # will fail!
do_something_else(x=1, y=2, z=3) # will fail!

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

代码语言:javascript
运行
复制
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)。他们最有可能考虑做出这样的改变,因为使用关键字参数调用函数通常对其他人来说更清晰和更易读。

票数 5
EN

Stack Overflow用户

发布于 2021-08-27 09:05:52

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68917844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档