Сбой функции np.nan_to_num - PullRequest
       1

Сбой функции np.nan_to_num

1 голос
/ 16 марта 2020

Я изучаю набор данных Случайных смертей, связанных с наркотиками . Ниже приведен список всех лекарств:

20  Heroin               2529 non-null   object 
 21  Cocaine              1521 non-null   object 
 22  Fentanyl             2232 non-null   object 
 23  FentanylAnalogue     389 non-null    object 
 24  Oxycodone            607 non-null    object 
 25  Oxymorphone          108 non-null    object 
 26  Ethanol              1247 non-null   object 
 27  Hydrocodone          118 non-null    object 
 28  Benzodiazepine       1343 non-null   object 
 29  Methadone            474 non-null    object 
 30  Amphet               159 non-null    object 
 31  Tramad               130 non-null    object 
 32  Morphine_NotHeroin   42 non-null     object 
 33  Hydromorphone        25 non-null     object 
 34  Other                435 non-null    object 
 35  OpiateNOS            88 non-null     object 
 36  AnyOpioid            2466 non-null   object 

Набор данных является редким, с Y для каждой причины смерти лекарства. Например, следующее: deaths['Heroin'].head():

0       NaN
1       NaN
2         Y
3         Y
4       NaN

Я пытаюсь преобразовать это в

0.        0
1         0
2         1
3         1
4         0

Чтобы преобразовать Y в 1, я б deaths = deaths.replace(to_replace={'Y':1}). Я сейчас пытаюсь изменить NaN на 0. Я пытаюсь использовать np.nan_to_num(), но мой код, похоже, ничего не делает.

Я использую следующее:

deaths.loc[:,'Heroin':'AnyOpioid'] = np.nan_to_num(deaths.loc[:,'Heroin':'AnyOpioid'])

Это не приводит к изменению оригинала набор данных, с deaths['Heroin'].head(), который выглядит как

0       NaN
1       NaN
2         Y
3         Y
4       NaN

(после предыдущей функции deaths.replace()).

Какой механизм c вызывает это? Я предполагаю, что это связано с .loc, но я не уверен, что посмотреть вначале или как исправить. Удаление .loc дает мне TypeError: cannot do slice indexing on <class 'pandas.core.indexes.range.RangeIndex'> with these indexers [Heroin] of <class 'str'>.

1 Ответ

1 голос
/ 16 марта 2020

Вы можете использовать notna, давая логическое значение False, если значение равно nan, и True, если значение равно чему-либо еще (например, Y здесь). Чтобы получить 0 и 1, вы можете использовать astype:

deaths['Heroin'] = deaths['Heroin'].notna().astype(int)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...