在我的代码中,我有一个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还是很陌生,因此将不胜感激。另外-如果您有更好的方法来实现这一目标,请告诉我。
谢谢!
编辑:对不起。现在它应该可以正常工作了。
答案 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
,这被视为浮点数。