代码之家  ›  专栏  ›  技术社区  ›  Stanko

为什么Dask在我的数据框中填写“foo”和1

  •  0
  • Stanko  · 技术社区  · 5 年前

    我已经阅读了大约15个csv文件:

    df = dd.read_csv("gs://project/*.csv", blocksize=25e6,
                     storage_options={'token': fs.session.credentials})
    

    然后我持久化了数据帧(它使用7.33 GB内存):

    df = df.persist()
    

    我设置了一个新索引,因为我希望该字段上的group by尽可能高效:

    df = df.set_index('column_a').persist()
    

    现在我有181个分区和180个分区。 为了测试group by的运行速度,我尝试了一个只打印group Dataframe的自定义应用函数:

    grouped_by_index = df.groupby('column_a').apply(lambda n: print(n)).compute()
    

    使用正确的列打印数据帧,但值为“1”、“foo”或“True”。例子:

    column_b  column_c column_d  column_e  column_f  column_g  \
    index                                                                   
    a          foo           1      foo        1           1           1
    

    我还得到警告:

    /opt/conda/lib/python3.7/site-packages/ipykernel_-launcher.py:1: meta 未指定,从部分数据推断。 .apply(func)在:.apply(func,meta={'x':'f8','y':'f8'})之后 数据帧结果或:.apply(func,meta=('x','f8'))
    对于series result“”,启动IPython内核的入口点。

    1 回复  |  直到 5 年前
        1
  •  2
  •   mdurant    5 年前

    事实上,如果你仔细阅读这些文件 apply ,你会看到的 meta= 申请 可以做非常一般的事情。

    不要 元= 申请

    元=