Выполните изменение значений в pandas кадре данных в Python - PullRequest
0 голосов
/ 26 марта 2020

У меня есть набор данных, который был загружен в pandas DataFrame. Когда я печатаю data.head(), это выглядит следующим образом.

G1  G2  G3  absences  failures  studytime romantic internet
0   5   6   6         6         0          2       no       no
1   5   5   6         4         0          2       no      yes
2   7   8  10        10         3          2       no      yes
3  15  14  15         2         0          3      yes      yes
4   6  10  10         4         0          2       no       no

Я пытаюсь создать модель линейной регрессии и хочу преобразовать да и нет в 1 и 0 в romantic и internet столбцов.

Код, который я использовал:

df['romantic'].replace('yes', 0)
df['romantic'].replace('no', 1)
df['internet'].replace('yes', 0)
df['internet'].replace('no', 1)

Не работал :( Он также не отображал какую-либо ошибку.

Я пытался сделать линейная модель с data = df[["G1", "G2", "G3", "absences", "failures", "studytime", "romantic", "internet"]] и она показала:

ValueError: could not convert string to float: 'yes'

Хотя я думал, что преобразовал их. Пожалуйста, помогите, спасибо ...

Ответы [ 5 ]

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

Чтобы преобразовать оба интересующих вас столбца, запустите:

df.romantic = (df.romantic == 'yes').astype(int)
df.internet = (df.internet == 'yes').astype(int)

Обратите внимание, что вы написали конвертируйте да и нет в 1 и 0 с , поэтому в вашем примере кода вы попытаться присвоить значения противоположным образом.

0 голосов
/ 26 марта 2020

Вы должны назначить его при замене:

df = pd.DataFrame({'romantic':['no','no','no','yes','no'], 'internet':['no','yes','yes','yes','no']})
df

df['romantic'] = df['romantic'].replace('yes', 0)
df['romantic'] = df['romantic'].replace('no', 1)
df['internet'] = df['internet'].replace('yes', 0)
df['internet'] = df['internet'].replace('no', 1)

print(df)

   romantic  internet
0         1         1
1         1         0
2         1         0
3         0         0
4         1         1

Есть и другие способы сделать это в Python:

Pandas.Series.apply Lambda

df['romantic'] = df['romantic'].apply(lambda x: 0 if x == 'yes' else 1)
df['internet'] = df['internet'].apply(lambda x: 0 if x == 'yes' else 1)

Numpy.where

df['romantic'] = np.where(df['romantic'] == 'yes',0,1)
df['internet'] = np.where(df['internet'] == 'yes',0,1)

Pandas.Series.map

df['romantic'] = df['romantic'].map(dict(yes = 0, no = 1))
df['internet'] = df['internet'].map(dict(yes = 0, no = 1))

Все дают одинаковый результат.

0 голосов
/ 26 марта 2020
df.replace({'yes': 0, 'no': 1}, regex=True)

Попробуйте это. Заменяет все вхождения «да» на 0 и все вхождения «нет» на 1.

0 голосов
/ 26 марта 2020
mapper = {'yes':0,'no':1}
df.loc[:,'romantic'] = df['romantic'].map(mapper)
df.loc[:,'internet'] = df['internet'].map(mapper)

Используйте функцию карты для этой работы

0 голосов
/ 26 марта 2020

Если вы хотите заменить все «да» на 0, а все «нет» на 1, используйте:

df.replace({'yes': 0, 'no': 1})
...