【问题标题】:Dask and Pandas giving different resultsDask 和 Pandas 给出不同的结果
【发布时间】:2022-10-05 08:10:59
【问题描述】:

运行以下代码时,我得到不同的结果。

import dask

# Loading Data
df = dask.datasets.timeseries()

# Dask Computation
df.groupby(\"name\").aggregate({\"x\": \"sum\", \"y\": \"max\"}).compute()

# Pandas computation
pandas_df = df.compute()
pandas_df.groupby(\"name\").aggregate({\"x\": \"sum\", \"y\": \"max\"})
  • dask - sum(x) 塞尔达是 54.898716
  • pandas - sum(x) 对于塞尔达是 100.269283

我想了解我在使用 dask 时哪里出错了

  • 你可以包括 dask 版本吗?我无法重现这一点。
  • 向我们展示您的数据框
  • @SultanOrazbayev 我正在使用版本“2022.9.2”,还附上了截图i.imgur.com/vGRelRp.png
  • @lagrangian_headache 我可以用 2022.9.2 但不能用 2022.8.0 重现这个结果。我在github.com/dask/dask/issues/9535 看到现在有一​​个 GH 问题,所以把它留在这里让其他人关注。
  • 值得指出的是,.timeseries() 是基于随机数的。我认为它在多次调用时仍然应该产生相同的结果,就像这里一样。

标签: python pandas dask


【解决方案1】:

问题是由于数据的生成方式导致结果不一致,例如:

# Loading Data
df = dask.datasets.timeseries()

# Dask Computation
dask_res = df.groupby("name").aggregate({"x": "sum", "y": "max"}).compute()

# Pandas computation
pandas_df = df.compute()
pandas_res = pandas_df.groupby("name").aggregate({"x": "sum", "y": "max"})

np.allclose(pandas_res.loc[dask_res.index], dask_res)
# False

如果我将数据帧从 pandas 重新加载到 dask 怎么办?

# Loading Data
df = dask.datasets.timeseries().compute()
df = dask.dataframe.from_pandas(df, 1000)

# Dask Computation
dask_res = df.groupby("name").aggregate({"x": "sum", "y": "max"}).compute()

# Pandas computation
pandas_df = df.compute()
pandas_res = pandas_df.groupby("name").aggregate({"x": "sum", "y": "max"})

np.allclose(pandas_res.loc[dask_res.index], dask_res)
# True

【讨论】:

    猜你喜欢
    • 2018-05-07
    • 2021-04-08
    • 2019-12-09
    • 2012-07-12
    • 2021-09-25
    • 2023-03-30
    • 1970-01-01
    • 2011-04-03
    • 2015-08-26
    相关资源
    最近更新 更多