【问题标题】:Dask dataframe groupby fails with type error, but identical pandas groupby succeedsDask 数据帧 groupby 因类型错误而失败,但相同的 pandas groupby 成功
【发布时间】:2020-03-16 03:13:18
【问题描述】:

我从 geopandas 期货创建了一个 dask 数据框,每个都按照此处的示例生成一个 pandas 数据框:https://gist.github.com/mrocklin/e7b7b3a65f2835cda813096332ec73ca

daskdf = dd.from_delayed(lazy_dataframes,lazy_dataframes, meta=lazy_dataframes[0].compute())

所有 dtypes 似乎都是合理的

daskdf.dtypes
left          float64
bottom        float64
right         float64
top           float64
score          object
label          object
height        float64
area          float64
geometry     geometry
shp_path       object
geo_index      object
Year            int64
Site           object
dtype: object

但是 dd groupby 操作失败

daskdf.groupby(['Site']).height.mean().compute()
...
"/Users/ben/miniconda3/envs/crowns/lib/python3.7/site-packages/dask/dataframe/utils.py", line 577, in _nonempty_series
    data = np.array([entry, entry], dtype=dtype)
builtins.TypeError: data type not understood

而 pandas 对相同数据的相同处理没有问题。

daskdf.compute().groupby(['Site']).height.mean()
Site
SOAP    15.102355
Name: height, dtype: float64

元数据类型可能会导致这种情况。当我扩展我的工作流程时,我想对持久化数据执行分布式操作。

【问题讨论】:

    标签: pandas dask geopandas dask-delayed


    【解决方案1】:

    问题是来自 geopandas 的“几何”dtype。我的熊猫数据框来自使用 geopandas.read_file() 加载 shapefile。未来的用户要小心,在创建 dask 数据框时删除此列。我知道前一段时间有一次 dask-geopandas 尝试。自从声明以来,这很难理解

    daskdf.groupby(['Site']).height.mean().compute()
    

    不涉及几何列。 Dask 必须检查所有列的 dtypes,而不仅仅是操作中使用的那些。小心!

    删除几何列会产生预期的结果。

    daskdf.drop(columns="geometry")
    daskdf.groupby(['Site']).height.mean().compute()
    

    用 geopandas 标记,希望未来的用户可以找到它。

    【讨论】:

    • 好吧,我遇到了“需要”几何列的 dask-geopandas 的相反麻烦。但是在一些聚合函数之后,我不想保留几何,我得到一个异常`未知列几何`。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    • 1970-01-01
    • 2014-07-04
    相关资源
    最近更新 更多