#python #python-3.x #pandas #dataframe #nan
#python #python-3.x #pandas #фрейм данных #nan
Вопрос:
У меня есть фрейм данных pandas, который содержит столбец, заполненный 3 значениями объекта: «true», «false» и «—»
Я хочу заменить «истинные» значения на 0, а «ложные» — на 1, поэтому я написал следующее
df['True/False'] = df['True/False'].str.replace('False' '1')
df['True/False'] = df['True/False'].str.replace('True', '0')
Итак, я бы ожидал ввода ['False','True','False','False','False','---']
вернуться [1,0,1,1,1,'---']
, когда я print(df['True/False'])
.
Но вместо этого я получаю:
["NaN","NaN","NaN","NaN","NaN","NaN"]
Небольшая помощь?
Комментарии:
1. вам лучше использовать general
.replace
, а неstr.replace
. Итакdf['True/False'] = df['True/False'].replace({'False':1,'True':0})
2. кроме того,
'False'
в вашем коде отсутствует запятая после
Ответ №1:
Вместо df.replace
этого вы должны использовать Series.map
, поскольку это намного быстрее:
Создайте набор dict
значений, которые вы хотите заменить:
In [3590]: d = {'True': 0, 'False': 1}
Рассмотрим df
:
In [3592]: df = pd.DataFrame(['False','True','False','False','False','---'], columns=['A'])
In [3593]: df
Out[3593]:
A
0 False
1 True
2 False
3 False
4 False
5 ---
In [3597]: df.A = df.A.map(d).fillna(df.A)
In [3598]: df
Out[3598]:
A
0 1
1 0
2 1
3 1
4 1
5 ---