Возьмите среднее значение нескольких столбцов в pandas кадре данных - PullRequest
0 голосов
/ 16 июня 2020

У меня есть pandas фрейм данных с 4 столбцами, как часть оборудования экспортирует данные в csv. Мой текущий код принимает csv, импортирует его в фрейм данных, добавляет заголовки в столбцы, а затем запускает на нем некоторый код, чтобы преобразовать его так, как нам нужно. Это основные части кода:

def data_an(info):
    data = pd.read_csv(info, usecols=[0, 1, 2, 3], names=["a", "b", "c", "d"])
    data = data.replace(0, np.NaN)
    return(data.mean(), data.count())

print(data_an('output.csv'))

, и вот что он выведет:

a    19.381846
b    18.515209
c    18.401317
d    18.849287
dtype: float64, a    10675
b    11126
c     6866
d     5496
dtype: int64

Мне было интересно, как я смогу взять среднее значение a, b, c и d одновременно, поэтому просуммируйте значения во всех 4 столбцах, а затем возьмите среднее значение по всем 4 столбцам.

1 Ответ

0 голосов
/ 16 июня 2020

Использование pandas

  • Если вы хотите взять среднее значение каждой строки, исключая NaN s, data.mean(axis=1, skipna=True) будет работать.
  • Если вам нужно среднее значение для каждого столбца, используйте data.mean(axis=0, skipna=True) или data.describe().
  • Если вы хотите среднее значение всех записей, используйте data.mean().mean(), чтобы взять среднее значение всех столбцов затем все строки (эквивалентно среднему значению всех записей, если в каждом столбце одинаковое количество NaN s).

Используя numpy

Вы также можете преобразовать данные в массив numpy с, например, data.to_numpy(np.float64) (что вызовет ошибку, если ваши данные не числовые c) и используйте обычные операции numpy. np.nanmean(data.to_numpy(np.float64)) даст правильный результат, даже если столбцы ваших данных имеют разное количество NaN записей.

Пример

In [1]: import pandas as pd

In [2]: import numpy as np

In [3]: df = pd.DataFrame({'a': [1, 2, 3], 'b': [1, 2, 3]})

In [4]: df
Out[4]:
   a  b
0  1  1
1  2  2
2  3  3

In [5]: df.to_numpy(np.float64)
Out[5]:
array([[1., 1.],
       [2., 2.],
       [3., 3.]])

In [6]: df.to_numpy(np.float64).mean(axis=1)
Out[6]: array([1., 2., 3.])

In [7]: df.to_numpy(np.float64).mean(axis=0)
Out[7]: array([2., 2.])

In [8]: df.to_numpy(np.float64).mean()
Out[8]: 2.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...