Я изучаю набор данных Случайных смертей, связанных с наркотиками . Ниже приведен список всех лекарств:
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'>
.