我有以下数据框
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
值?
答案 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
尽管%
没有排序,并且值也不完全相同