ValueError: '对象对于所需数组来说太深'

Posted

技术标签:

【中文标题】ValueError: \'对象对于所需数组来说太深\'【英文标题】:ValueError: 'object too deep for desired array'ValueError: '对象对于所需数组来说太深' 【发布时间】:2017-01-21 07:01:33 【问题描述】:

我在 Python 程序中有一个 ValueError: 'object too deep for desired array'。 使用 numpy.digitize 时出现此错误。 我认为这就是我使用 Pandas DataFrames 的方式: 为了简单起见(因为这是通过外部库完成的),我的程序中有一个列表,但该库需要一个 DataFrame,所以我执行以下操作:

ts = range(1000)
df = pandas.DataFrame(ts)
res = numpy.digitize(df.values, bins)

但是看起来 df.values 是一个列表数组,而不是一个浮点数组。我的意思是:

array([[   0],
   [   1],
   [   2],
   ..., 
   [997],
   [998],
   [999]], dtype=int64)

请帮忙,我在这上面花了太多时间。

【问题讨论】:

我认为如果你升级到最新版本的numpy(1.11),你可以将任意形状的数组传递给np.digitize 这能回答你的问题吗? What does "ValueError: object too deep for desired array" mean and how to fix it? 【参考方案1】:

试试这个:

numpy.digitize(df.iloc[:, 0], bins)

您正在尝试从整个 DataFrame 中获取值。这就是你得到二维数组的原因。数组中的每一行都是DataFrame的一行。

【讨论】:

这行得通,但我实际上不明白。我可以创建 DataFrame 以便获得一维数组(可能转置初始时间序列)吗? 然后创建一个系列 (s = pandas.Series(ts))。系列总是一维的。这取决于您的用例。如果你得到一个 DataFrame,你需要对它进行索引,这样你只将一列传递给digitize。如果您的数据是一维数据,您可以从一开始就使用 Series。

以上是关于ValueError: '对象对于所需数组来说太深'的主要内容,如果未能解决你的问题,请参考以下文章

pytorch对象在保存图像时对于数组来说太深了

ValueError:所需数组的深度太小,

Python ValueError:所需数组的深度太小

ValueError:输入包含 NaN、无穷大或对于 dtype 来说太大的值

GridSearchCV():ValueError:输入包含 NaN、无穷大或对于 dtype('float64') 来说太大的值

如何解决:ValueError:输入包含 NaN、无穷大或对于 dtype('float32') 来说太大的值?