为什么选择会引发FutureWarning?

时间:2019-07-18 21:34:28

标签: python numpy numpy-ndarray future-warning

在我的代码中,我有一个2D numpy.ndarray,其中填充了 numpy.str _ 值。我正在尝试使用select方法将值“ null”更改为“ nan”。问题在于此方法引发了FutureWarning。

我已阅读this。在一个建议下,我尝试不比较Python字符串和Numpy字符串,而是在开始时将Python字符串转换为Numpy字符串。显然,这没有帮助,我正在寻找建议。

我想避免关闭警告(因为它在链接中)。在我看来,这是一种非常肮脏的方法。

我的代码段:

import pandas_datareader as pd
import numpy as np
import datetime as dt


start_date = dt.datetime(year=2013, month=1, day=1)
end_date = dt.datetime(year=2013, month=2, day=1)
df = pd.DataReader("AAA", "yahoo", start_date, end_date + dt.timedelta(days=1))
array = df.to_numpy()

null = np.str_("null")
nan = np.str_("nan")
array = np.select([array == null, not array == null], [nan, array])
print(array[0][0].__class__)
print(null.__class__)
C\Python\Project.py:13: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
  array = np.select([array == null, not array == null], [nan, array])
<class 'numpy.str_'>
<class 'numpy.str_'>

我对Python还是很陌生,因此将不胜感激。另外-如果您有更好的方法来实现这一目标,请告诉我。

谢谢!

编辑:对不起。现在它应该可以正常工作了。

1 个答案:

答案 0 :(得分:0)

我还没有50名声望,所以我不能发表评论。

据我了解,您只想将所有'null'项更改为'nan'

您的代码创建了一个由浮点值组成的Numpy数组,但是由于某种原因,您希望数组中包含'null'的字符串吗? 也许你应该写

array = df.to_numpy()
array = array.astype(str)

使其更加清晰。

从这里开始,数组仅由字符串组成,并且要从'null'更改为'nan',只需编写

array[array == 'null'] = 'nan'

,警告消失了。您甚至不必使用np.select

如果要在数组中使用浮点值,则可以使用Numpy自己的np.nan代替字符串,然后执行

array = array.astype(float)

nan字符串会自动转换为np.nan,这被视为浮点数。