Обработка нулей или NaN в операциях Pandas DataFrame
У меня есть DataFrame (df), как показано ниже, где каждый столбец отсортирован от наибольшего к наименьшему для частотного анализа. Это оставляет некоторые значения либо нулей, либо значений NaN, так как каждый столбец имеет разную длину.
08FB006 08FC001 08FC003 08FC005 08GD004
----------------------------------------------
0 253 872 256 11.80 2660
1 250 850 255 10.60 2510
2 246 850 241 10.30 2130
3 241 827 235 9.32 1970
4 241 821 229 9.17 1900
5 232 0 228 8.93 1840
6 231 0 225 8.05 1710
7 0 0 225 0 1610
8 0 0 224 0 1590
9 0 0 0 0 1590
10 0 0 0 0 1550
Мне нужно выполнить следующий расчет, как будто каждый столбец имеет разную длину или количество записей (игнорируя нулевые значения). Я пытался использовать NaN, но по какой-то причине операции со значениями Nan невозможны.
Вот что я пытаюсь сделать со своими столбцами df:
shape_list1=[]
location_list1=[]
scale_list1=[]
for column in df.columns:
shape1, location1, scale1=stats.genpareto.fit(df[column])
shape_list1.append(shape1)
location_list1.append(location1)
scale_list1.append(scale1)
2 ответа
Предполагая, что все значения положительные (как видно из вашего примера и описания), попробуйте:
stats.genpareto.fit(df[df[column] > 0][column])
Это фильтрует каждый столбец для работы только с положительными значениями. Или, если допустимы отрицательные значения,
stats.genpareto.fit(df[df[column] != 0][column])
Синтаксис грязный, но изменить
shape1, location1, scale1=stats.genpareto.fit(df[column])
в
shape1, location1, scale1=stats.genpareto.fit(df[column][df[column].nonzero()[0]])
Объяснение: df[column].nonzero()
возвращает кортеж размера (1,)
чей единственный элемент, элемент [0]
, это пустой массив, который содержит метки индекса, где df
ненулевой Индексировать df[column]
по этим ненулевым меткам вы можете использовать df[column][df[column].nonzero()[0]]
,