Рассмотрим одномерный массив всех элементов nan,
arr = np.array([np.nan, np.nan, np.nan, np.nan])
np.isfinite () -> Поэлементное тестирование на конечность
bool_arr = np.isfinite(arr)
print(bool_arr)
Вывод:
[False False False False]
any -> вернет True, если в итерируемом есть значение истинности.
chk = not any(bool_arr)
print(chk)
Вывод: True
Это показывает, что все значения в массиве являются nan.Now, мы можем заменить все nan с нулями, как это,
arr = np.nan_to_num(arr, copy=True)
print(arr)
Вывод: [0. 0. 0. 0.]
Чтобы преобразовать 0 в nan, сделайте это,
arr[arr == 0] = 'nan' # or use np.nan
print(arr)
Вывод: [nan nan nan nan]
Теперь рассмотрим пример кадра данных, как показано ниже,
col1 col2 col3 col4
0 5.0 1.0 6.0 NaN
1 2.0 2.0 1.0 NaN
2 NaN NaN NaN NaN
3 3.0 4.0 NaN NaN
4 NaN NaN NaN NaN
Чтобы получить стандартное значение для каждой строки, выполните следующее:
std = []
for row in range(len(df)):
k = df.iloc[row].values
bool_arr = np.isfinite(k)
chk = not any(bool_arr)
if chk == True:
k = np.nan_to_num(k, copy=True)
st = np.nanstd(k)
if chk == True:
st = np.nan
std.append(st)
data = {'std_row_wise': std}
std_df = pd.DataFrame(data = data)
std_df
Вывод: каждое значение кадра данных составляет std
строки.
std_row_wise
0 2.160247
1 0.471405
2 NaN
3 0.500000
4 NaN