Python - Расчет стандартного отклонения (уровень строки) столбцов данных - PullRequest
0 голосов
/ 17 декабря 2018

Я создал фрейм данных Panda и могу определить стандартное отклонение одного или нескольких столбцов этого фрейма данных (уровень столбцов).Мне нужно определить стандартное отклонение для всех строк конкретного столбца.Ниже приведены команды, которые я пробовал до сих пор

inp_df.std() ### Will determine standard deviation of all the numerical columns by default

salary         8.194421e-01
num_months     3.690081e+05
no_of_hours    2.518869e+02

inp_df.std(axis = 0) ### Same as above command. Performs standard deviation column level

inp_df[['salary']].std() ### Determines Standard Deviation over only the salary column of the dataframe
salary         8.194421e-01

inp_df.std(axis=1) ### Determines Standard Deviation for every row present in the dataframe. But it does this for the entire row and it will output values in a single column. One std value for each row

0       4.374107e+12
1       4.377543e+12
2       4.374026e+12
3       4.374046e+12
4       4.374112e+12
5       4.373926e+12
.
.
.

Когда я выполняю команду ниже, я получаю "NaN "для всех записей.Есть ли способ решить эту проблему?

inp_df[['salary']].std(axis = 1) ### Trying to determine standard deviation only for "salary" column at the row level

0      NaN
1      NaN
2      NaN
3      NaN
4      NaN
.
.
.
.
.

1 Ответ

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

Ожидается, так как если установлен флажок DataFrame.std:

Нормализуется по умолчанию N-1.Это можно изменить с помощью аргумента ddof

Если у вас 1 элемент, вы делите на 0. Поэтому, если у вас один столбец и вы хотите, чтобы стандартное отклонение образца по столбцам получило все пропущенные значения.

Образец :

inp_df = pd.DataFrame({'salary':[10,20,30],
                       'num_months':[1,2,3],
                       'no_of_hours':[2,5,6]})
print (inp_df)
   salary  num_months  no_of_hours
0      10           1            2
1      20           2            5
2      30           3            6

Выбрать один столбец по одному [] для Series:

print (inp_df['salary'])
0    10
1    20
2    30
Name: salary, dtype: int64

Получить std из Series - получить скалярное значение:

print (inp_df['salary'].std())
10.0

Выбрать один столбец двойным [] для one column DataFrame:

print (inp_df[['salary']])
   salary
0      10
1      20
2      30

Получить std из DataFrame для индекса (значение по умолчанию)- получить один элемент Series:

print (inp_df[['salary']].std())
#same like
#print (inp_df[['salary']].std(axis=0))
salary    10.0
dtype: float64

Получить std из DataFrame на столбцы (ось = 1) - получить все NaN:

print (inp_df[['salary']].std(axis = 1))
0   NaN
1   NaN
2   NaN
dtype: float64

Если изменено значение по умолчанию ddof=1 до ddof=0:

print (inp_df[['salary']].std(axis = 1, ddof=0))
0    0.0
1    0.0
2    0.0
dtype: float64

Если хотите std по 2 или более столбцам:

#select 2 columns
print (inp_df[['salary', 'num_months']])
   salary  num_months
0      10           1
1      20           2
2      30           3

#std by index
print (inp_df[['salary','num_months']].std())
salary        10.0
num_months     1.0
dtype: float64

#std by columns
print (inp_df[['salary','no_of_hours']].std(axis = 1))
0     5.656854
1    10.606602
2    16.970563
dtype: float64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...