Изменение данных в столбце DataFrame (Pandas) с циклом For

91
10

Я пытаюсь взять данные из "Mathscore" и преобразовать значения в числовые значения, все в разделе "Mathscore".


strong = 1
Слабый = 0


Я попытался сделать это с помощью функции ниже, используя цикл For, но я не могу запустить код. Я пытаюсь неправильно присвоить данные?


Спасибо!


import pandas as pd

data = {'Id_Student' : [1,2,3,4,5,6,7,8,9,10],'Mathscore' :['Strong','Weak','Weak','Strong','Strong','Weak','Strong','Strong','Weak','Strong']}

df = pd.DataFrame(data)
df

# # Strong = 1 and Weak =0

##def tran_mathscore(x): if x == 'Strong': return 1 if x == 'Weak': return 0
##
##df['Trans_MathScore'] = df['Mathscore'].apply(tran_mathscore)
##df

##df.Mathscore[0]=["Weak"]

##print(df.columns)
##
##
##print(df.Mathscore)

def tran_mathscore():
for i in df.Mathscore:
if i == "Strong":
df.Mathscore[i]= ['1']

elif i == "Weak":
df.Mathscore[i]= ['0']

tran_mathscore()

спросил(а) 2016-09-07T23:32:00+03:00 4 года, 1 месяц назад
1
Решение
81

вы можете классифицировать свои данные:


In [23]: df['Mathscore'] = df.Mathscore.astype('category').cat.rename_categories(['1','0'])

In [24]: df
Out[24]:
Id_Student Mathscore
0 1 1
1 2 0
2 3 0
3 4 1
4 5 1
5 6 0
6 7 1
7 8 1
8 9 0
9 10 1

In [25]: df.dtypes
Out[25]:
Id_Student int64
Mathscore category
dtype: object


или сопоставить его:

In [27]: df
Out[27]:
Id_Student Mathscore
0 1 Strong
1 2 Weak
2 3 Weak
3 4 Strong
4 5 Strong
5 6 Weak
6 7 Strong
7 8 Strong
8 9 Weak
9 10 Strong

In [28]: df.Mathscore.map(d)
Out[28]:
0 1
1 0
2 0
3 1
4 1
5 0
6 1
7 1
8 0
9 1
Name: Mathscore, dtype: int64

In [29]: d
Out[29]: {'Strong': 1, 'Weak': 0}

In [30]: df['Mathscore'] = df.Mathscore.map(d)

In [31]: df
Out[31]:
Id_Student Mathscore
0 1 1
1 2 0
2 3 0
3 4 1
4 5 1
5 6 0
6 7 1
7 8 1
8 9 0
9 10 1

In [32]: df.dtypes
Out[32]:
Id_Student int64
Mathscore int64
dtype: object


PS я предпочитаю первый вариант как categorical dtype использует гораздо меньше памяти

ответил(а) 2016-09-07T23:38:00+03:00 4 года, 1 месяц назад
59

Вы можете использовать:


df['Mathscore'] = df['Mathscore'].str.replace('Strong','1')
df['Mathscore'] = df['Mathscore'].str.replace('Weak','0')

Возврат:


In [1]: df

Out[1]:

Id_Student Mathscore
0 1 1
1 2 0
2 3 0
3 4 1
4 5 1
5 6 0
6 7 1
7 8 1
8 9 0
9 10 1

ответил(а) 2016-09-08T00:07:00+03:00 4 года, 1 месяц назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема