Python Dask数组平均抛出次数“;使用“序列”设置数组元素;数组平均值有效的例外情况

Python Dask数组平均抛出次数“;使用“序列”设置数组元素;数组平均值有效的例外情况,python,arrays,numpy,dask,Python,Arrays,Numpy,Dask,我有一个pandas数据帧,它由一列numpy数组组成。我可以使用numpy.mean函数来计算数组的平均值 import numpy import pandas f = pandas.DataFrame({"a":[numpy.array([1.0, 2.0]), numpy.array([3.0, 4.0])]}) numpy.mean(f["a"]) # returns array([2., 3.]) 我想在达斯克做同样的事情 import dask.dataframe import d

我有一个pandas数据帧,它由一列numpy数组组成。我可以使用
numpy.mean
函数来计算数组的平均值

import numpy
import pandas
f = pandas.DataFrame({"a":[numpy.array([1.0, 2.0]), numpy.array([3.0, 4.0])]})
numpy.mean(f["a"]) # returns array([2., 3.])
我想在达斯克做同样的事情

import dask.dataframe
import dask.array
g = dask.dataframe.from_pandas(f, npartitions=1)
dask.array.mean(g["a"], dtype="float64")
(必须指定
dtype
,否则会出现
TypeError:不支持的操作数类型/:'NoneType'和'int'
异常。)

调用
dask.array.mean
返回以下内容,看起来是正确的

dask.array<mean_agg-aggregate, shape=(), dtype=float64, chunksize=(), chunktype=numpy.ndarray>

是否可以执行等效的Dask操作?

如果Dask Dataframe能够处理这种情况,那就好了,但现在不行。考虑到目前的情况,这其实并不奇怪

您的数据帧有点奇怪,因为该数据帧的元素本身就是Numpy数组

>>> f
            a
0  [1.0, 2.0]
1  [3.0, 4.0]
因此,Pandas认为这是一个对象数据类型数据帧

>>> f.dtypes                                                                                         
a    object
dtype: object
因为Dask Dataframe是惰性的,它实际上并不跟踪任何给定点上的所有数据,它只知道数据类型,在本例中,这些数据类型是非信息性的。Dask Dataframe并不知道如何处理这些复杂元素的平均计算。它不知道您的元素是numpy数组或字符串,还是自定义Python对象,等等

因此它会出错,您需要显式地提供数据类型

这个问题的完整解决方案可能是让熊猫建立一个更加复杂的数据类型继承权,但这在短期内可能不太可能


理想情况下,Dask数据帧会在此处提供更好的错误消息,鼓励您手动指定数据类型。如果您想提出问题,那将是受欢迎的。

有什么方法可以通过指定数据类型使其工作吗?我到处玩着传递东西,但没有用。
>>> f.dtypes                                                                                         
a    object
dtype: object