Pandas: среднее значение вычисления или std (стандартное отклонение) по всему кадру данных

Вот моя проблема, у меня есть dataframe, как это:

Depr_1 Depr_2 Depr_3 S3 0 5 9 S2 4 11 8 S1 6 11 12 S5 0 4 11 S4 4 8 8 

и я просто хочу рассчитать среднее значение по полному файловому кадру, поскольку следующее не работает:

 df.mean() 

Затем я придумал:

 df.mean().mean() 

Но этот трюк не будет работать для вычисления стандартного отклонения. Мои последние попытки:

 df.get_values().mean() df.get_values().std() 

За исключением того, что в последнем случае он использует функцию mean () и std () из numpy. Это не проблема для среднего значения, но для std, поскольку функция pandas использует по умолчанию ddof=1 , в отличие от numpy, где ddof=0 .

  • Как установить xlim и ylim в Seaborn lmplot facetgrid
  • Операнды не могли быть переданы вместе, когда использовались два ряда
  • Вложенный словарь для MultiIndex pandas DataFrame (3 уровня)
  • Почему pandas '==' отличается от '.eq ()'
  • Функции GroupBy в Python Pandas, такие как SUM (col_1 * col_2), средневзвешенные значения и т. Д.
  • Центрирование меток x-tick между отметками в matplotlib
  • нет атрибута с именем read_csv в pandas python
  • Быстрый (векторизованный) способ найти точки в одном DF, принадлежащие прямоугольникам одинакового размера (заданные двумя точками) со второго DF
  • 3 Solutions collect form web for “Pandas: среднее значение вычисления или std (стандартное отклонение) по всему кадру данных”

    Вы можете преобразовать dataframe в серию со stack :

     df.stack().std() # works by converting df to a series 

    или force numpy использовать ddof=1 вместо стандартного ddof=0 :

     df.values.std(ddof=1) # this is faster/more efficient 

    Также обратите внимание: df.mean().mean() не обязательно даст вам правильный ответ, если у вас отсутствуют значения, и в этом случае любое из этих решений должно работать (после того, как, конечно, сменив «std» на «mean») ,

    Дополнительное объяснение

    Подход к стекю работает, преобразовывая ваши данные с 5×3 в 15×1, обрабатывая таким образом, как если бы все они находились в одном столбце и обеспечивали правильную степень свободы для стандартного отклонения. См. Документацию по stack здесь и здесь.

    Обратите внимание, что вы можете установить степень свободы для std() numpy с ddof опции ddof (и аналогично std() pandas), так что способ numpy также может быть легко работать, а также будет несколько быстрее. (Когда вы вводите df.get_values() или df.values вы возвращаете массив numpy, поэтому последующий метод std() будет от numpy.)

    Что касается скорости, numpy df.values.std ( df.values.std ) примерно на 5 раз быстрее на моем компьютере.

    Наконец, обратите внимание, что вы можете получить несколько разные ответы от pandas и numpy версий std. Они будут отличаться только в 16-м десятичном разряде или около того, и это не является поводом для беспокойства, а лишь незначительная разница в том, как numpy и pandas вычисляются за кулисами (математика с плавающей запятой).

    df.mean(0) может дать вам то, что вы ищете. df.std(0) работает.

    Вам может понравиться df.describe () Я думаю, что он делает то, что вы хотите http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.describe.html?highlight=describe#pandas.DataFrame.describe

    Python - лучший язык программирования в мире.