Dask Dataframe описывает метод, возвращающий значения NaN в квантилях - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть следующий фрейм данных

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 dataframe

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 значений в то время какдатафрейм pandas получает правильные значения?

1 Ответ

0 голосов
/ 05 декабря 2018

Если вы выполните 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

, вы получите правильные значения, а на самом деле, если вы не выберете столбец 'Score' после выполнения 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

, хотя % не упорядочены и значения не совпадают

...