为什么我得到 'FutureWarning' 和 pandas.concat?
Why do I get a 'FutureWarning' with pandas.concat?
有人遇到过类似的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 中的大多数函数参数是 "positional or keyword" 个参数。
即如果我有这个功能:
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)
。他们很可能正在考虑进行此更改,因为使用关键字参数调用函数对于其他人来说通常更清晰易读。
不要担心未来的警告,它不会以任何方式影响您的代码。
但是尽量避免这种警告,因为将来不会显示此警告,而是在 pandas 更新时给出错误。这就是它显示未来警告的原因。
有人遇到过类似的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 中的大多数函数参数是 "positional or keyword" 个参数。
即如果我有这个功能:
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)
。他们很可能正在考虑进行此更改,因为使用关键字参数调用函数对于其他人来说通常更清晰易读。
不要担心未来的警告,它不会以任何方式影响您的代码。 但是尽量避免这种警告,因为将来不会显示此警告,而是在 pandas 更新时给出错误。这就是它显示未来警告的原因。