Ожидается, так как если установлен флажок 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