Преобразование переменной numeri c в категориальную, но, похоже, имеет много NaN - PullRequest
0 голосов
/ 12 июля 2020

Я пытаюсь разделить эту переменную numeri c на три категории, но после объединения я получил много NaN. Может ли кто-нибудь сказать мне, как решить эту проблему.

Корзина должна быть

1-2000
2000-8000
8000-35797

Код:

df_all['df_newcol'] = pd.cut(df.sales, bins = [1, 2000, 8000,35797], labels=['Low', 'Mid', 'High'])
df_all['df_newcol']
0           NaN
1           NaN
2           NaN
3          High
4          High
           ... 
3968995     NaN
3968996     NaN
3968997     NaN

1 Ответ

1 голос
/ 12 июля 2020

Я создал следующий исходный DataFrame ( df ):

    sales
10    200
12   2000
14   2001
16   7999
18   8000
20   8001
22  12000

Биннинг только возвращает:

10     Low
12     Low
14     Mid
16     Mid
18     Mid
20    High
22    High
Name: sales, dtype: category
Categories (3, object): [Low < Mid < High]

Пока , ОК.

Затем я определил df_all со следующим содержимым:

    xxxx
8    100
10   120
11   130
12   140
13   150
14   160
16   170
17   180
18   190
19   200
30   210
32   230

Обратите внимание, что он:

  • содержит некоторые дополнительные "значения индекса (отсутствуют в df ),
  • действительно ли не содержат некоторые значения индекса из df (а именно 20 и 22 * ​​1032 *).

Теперь, когда вы сохраняете результат объединения в df_all и распечатываете новый столбец, результат будет:

8     NaN
10    Low
11    NaN
12    Low
13    NaN
14    Mid
16    Mid
17    NaN
18    Mid
19    NaN
30    NaN
32    NaN
Name: df_newcol, dtype: category
Categories (3, object): [Low < Mid < High]

Как видите, содержит некоторые NaN s.

Причина в том, что результат cut равен скорректировано по индексу целевого DataFrame, например:

  • Строки с ключами, отсутствующими в df receive NaN .
  • Значения с ключами, отсутствующими в df_all , теряются.

И, наверное, так и случилось написано в вашем окружении. Очевидно, df_all содержит некоторые дополнительные индексы по сравнению с df , и им было дано NaN s.

Edit

df может также содержать значения вне данного набора ячеек, и результат объединения для таких строк будет также NaN .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...