Dask Dataframe描述了在分位数上返回NaN值的方法

时间:2018-12-05 18:16:27

标签: python pandas dask

我有以下数据框

np.random.seed(42)
dataframe = pd.DataFrame({'score': np.random.poisson(42, 100000)})

并创建一个dask数据框:

dask_df = dd.from_pandas(dataframe, npartitions=10)

并在两者上运行describe方法

dataframe.describe(percentiles=[.25, .5, .75, .85, .9]).score.to_frame().T

结果是:

         count      mean      std   min   25%   50%   75%   85%   90%   max
score  100000.0  42.00748  6.50478  17.0  38.0  42.0  46.0  49.0  50.0  73.0

但是在dask数据帧上运行相同的

dask_df.describe(percentiles=[.25, .5, .75, .85, .9]).score.to_frame().compute().T

获得以下结果

         count      mean      std   min  25%  50%  85%  75%  90%   max
score  100000.0  42.00748  6.50478  17.0  NaN  NaN  NaN  NaN  NaN  73.0

那么当熊猫数据框获得正确值时,它如何获得NaN值?

1 个答案:

答案 0 :(得分:0)

如果您执行quantile

print (dask_df.quantile(q=[.25, .5, .75, .85, .9]).compute().to_frame().T)
       0.25  0.50  0.75  0.85  0.90
score  38.0  42.0  46.0  49.0  51.0

您将获得正确的值,并且实际上,如果在执行describe之后未选择列“得分”,则会得到:

print (dask_df.describe(percentiles=[.25, .5, .75, .85, .9]).compute())
              score     0
count  100000.00000   NaN
mean       42.00748   NaN
std         6.50478   NaN
min        17.00000   NaN
25%             NaN  38.0
50%             NaN  42.0
85%             NaN  50.0
75%             NaN  46.0
90%             NaN  51.0
max        73.00000   NaN

因此,您要查找的值在另一列中。在这里,我无法解释原因,因此我无法真正回答您提出的问题,但至少您可以看到正在发生的事情。

最后要获得您想要的结果,然后在使用describe之前选择该列:

print (dask_df.score.describe(percentiles=[.25, .5, .75, .85, .9]).compute().to_frame().T)
      count      mean      std   min   25%   50%   85%   75%   90%   max
0  100000.0  42.00748  6.50478  17.0  38.0  42.0  50.0  46.0  51.0  73.0

尽管%没有排序,并且值也不完全相同