0

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

我读过这个。根据那里的建议,我尝试不将 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 很陌生,所以每一个帮助都将不胜感激。而且-如果您有更好的方法来实现这一目标,请告诉我。

谢谢!

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

4

1 回答 1

0

我还没有50声望,所以我不能评论..

据我了解,您只想将 al 'null'-entries更改为'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-strings 会自动转换为,这np.nan被视为一个浮点数。

于 2020-03-03T11:09:26.587 回答