Я пытаюсь заменить значения в одном столбце данных. Столбец («женский») содержит только значения «женский» и «мужской».
Я пробовал следующее:
w['female']['female']='1'
w['female']['male']='0'
Но получите точно такую же копию предыдущих результатов.
В идеале я хотел бы получить некоторый вывод, который похож на следующий цикл поэлементно.
if w['female'] =='female':
w['female'] = '1';
else:
w['female'] = '0';
Я просмотрел документацию по getchas ( http://pandas.pydata.org/pandas-docs/stable/gotchas.html ), но не могу понять, почему ничего не происходит.
Любая помощь будет оценена.
.loc
синтаксис, чтобы избежатьSettingWithCopyWarning
: pandas.pydata.org/pandas-docs/stable/…Вы можете редактировать подмножество данных, используя loc:
В таком случае:
источник
Смотрите pandas.DataFrame.replace () документы .
источник
Небольшое изменение:
источник
Это также должно работать:
источник
Вы также можете использовать
apply
с.get
т. Е.w['female'] = w['female'].apply({'male':0, 'female':1}.get)
:Рамка данных
w
:Использование
apply
для замены значений из словаря:Результат:
Примечание:
apply
со словарем следует использовать, если все возможные значения столбцов в кадре данных определены в словаре, иначе оно будет пустым для тех, которые не определены в словаре.источник
Это очень компактно:
Еще один хороший:
источник
В качестве альтернативы есть встроенная функция pd.get_dummies для таких назначений:
Это дает вам фрейм данных с двумя столбцами, по одному для каждого значения, встречающегося в w ['female'], из которого вы отбрасываете первое (потому что вы можете вывести его из того, что осталось). Новый столбец автоматически будет назван в качестве строки, которую вы заменили.
Это особенно полезно, если у вас есть категориальные переменные с более чем двумя возможными значениями. Эта функция создает столько фиктивных переменных, сколько необходимо для различения всех случаев. Будьте осторожны, чтобы не назначить весь фрейм данных одному столбцу, а вместо этого, если w ['female'] может быть 'male', 'female' или 'нейтральным', сделайте что-то вроде этого:
Затем у вас остаются две новые колонки, дающие вам фиктивную кодировку «женщина», и вы избавились от колонки со строками.
источник
Использование
Series.map
сSeries.fillna
Если ваш столбец содержит больше строк, чем only
female
иmale
,Series.map
в этом случае произойдет сбой, поскольку он вернетсяNaN
для других значений.Вот почему мы должны связать это с
fillna
:Пример почему
.map
не получается :Для правильного метода, цепь
map
сfillna
, поэтому мы заполняемNaN
значения из исходного столбца:источник
В
pandas
вызываемой также есть функция,factorize
которую вы можете использовать для автоматического выполнения этого типа работы. Он преобразует ярлыки с номерами:['male', 'female', 'male'] -> [0, 1, 0]
. Смотрите этот ответ для получения дополнительной информации.источник
Я думаю, что в ответе должно быть указано, какой тип объекта вы получаете во всех методах, предложенных выше: это Series или DataFrame.
Когда вы получите столбец с помощью
w.female.
илиw[[2]]
(где, предположим, 2 - это номер вашего столбца), вы получите DataFrame. Так что в этом случае вы можете использовать методы DataFrame, как.replace
.Когда вы используете
.loc
илиiloc
возвращаете Series, а Series не имеют.replace
метода, поэтому вы должны использовать такие методы, какapply
,map
и так далее.источник