Работа с отсутствующими значениями в наборе данных в python - PullRequest
0 голосов
/ 29 мая 2018

Как выбрать, отбрасывать ли значения NaN или заполнять их средним (или медианным) в наборе данных?И каковы другие методы очистки пропущенных значений в наборе данных?Пусть данные будут числами (в питоне)

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Нет определенного правила для работы с отсутствующими данными.Однако вот некоторые вещи, которые вы можете рассмотреть:

1.Если данные для столбца имеют пропущенные значения более 70%, вы можете удалить этот столбец.

2.Если распределение данных столбца симметрично по своей природе, вы можете рассмотреть возможность замены отсутствующих значений на среднее:

test = pd.DataFrame({'A': [1, 2, np.nan, 3, 4, 7, 11], 'B': [1, 4, 5, 7, 12, 45, 6], 'Group':['c', 'd', 'd', 'c', 'd', 'c', 'd']})

test
    A       B   Group
0   1.0     1   c
1   2.0     4   d
2   NaN     5   d
3   3.0     7   c
4   4.0     12  d
5   7.0     45  c
6   11.0    6   d

test['A'].fillna(test['A'].mean(), inplace=True)

test
    A           B   Group
0   1.000000    1   c
1   2.000000    4   d
2   4.666667    5   d
3   3.000000    7   c
4   4.000000    12  d
5   7.000000    45  c
6   11.000000   6   d

ИЛИ вы можете сгруппировать данные и использовать сгруппированное среднее:

test['A'].fillna(test.groupby('Group')['A'].transform('mean'), inplace=True)
test
    A           B   Group
0   1.000000    1   c
1   2.000000    4   d
2   5.666667    5   d
3   3.000000    7   c
4   4.000000    12  d
5   7.000000    45  c
6   11.000000   6   d

3.Если данные для столбца искажены, вы можете рассмотреть возможность использования медианы для заполнения пропущенных значений.(Замените «среднее» на «медиана» в приведенной выше команде).

4.В качестве альтернативы вы можете также рассмотреть неконтролируемый подход, такой как кластеризация.Здесь, когда ваши данные кластеризованы, вы можете использовать значение режима или среднее значение кластера и соответственно заменить отсутствующие данные.

Надеюсь, это поможет.

0 голосов
/ 29 мая 2018

Это всегда зависит от вашего набора данных и процента пропущенных значений.

Для небольшого процента пропущенных значений сброс значений NaN является приемлемым решением.Если процент не пренебрежимо мал, то отбрасывать NaN настоятельно не рекомендуется.Тогда типология заполнения зависит от типа данных.Если ваши пропущенные значения должны быть в известном и небольшом диапазоне, то вы можете заполнить средним значением других значений.Например, если ваш набор данных включает возраст учеников в школе (но многие из этих значений отсутствуют), среднее значение не должно создавать проблем для определенного анализа.С другой стороны, если у вас есть последовательность увеличивающихся измерений, которые медленны во времени, вы можете подумать о замене значений NaN заполнением вперед или назад.Например, в приведенной ниже ситуации df.fillna(method='ffill') должно быть лучше, чем df.fillna(df.mean()):

                    A       
01-01-2018 00:00  0.1   
01-01-2018 00:01  0.1   
01-01-2018 00:02  NaN   
01-01-2018 00:03  0.1  
01-01-2018 00:04  0.2  
01-01-2018 00:05  0.2  

Но в этом другом примере заменить на среднее значение лучше:

             Age    Class
StudentA    15.3       10   
StudentB    16.1       10
StudentC    15.5        9
StudentD     NaN       10
StudentE    16.0       10

Опятьне является общим правилом, но это зависит от вашего набора данных и анализа, который вы должны сделать.

...