pd.getdummies python pandas

#python #pandas

#python #панды

Вопрос:

У меня есть набор данных с 12 столбцами, и один из моих столбцов «Устройства» имеет 250 функций — разные имена телефонов.

введите описание изображения здесь

Что я пытаюсь сделать, так это применить opd.get dummies и создать 3 столбца — один для устройств Apple, 2-й для Samsung и 3-й для всех других имен устройств.

введите описание изображения здесь

Можно ли это сделать?

Комментарии:

1. что вы пробовали? Покажите свой код. Что вы получили? Вы получили сообщение об ошибке? всегда помещайте полное сообщение об ошибке (начинающееся со слова «Traceback») в вопрос (не комментарий) в виде текста (не скриншота, не ссылки на внешний портал). Есть и другая полезная информация.

2. сначала попробуйте сделать это, а затем задайте вопрос. И если вы уже устали от этого, тогда покажите вам код, а не спрашивайте, можно ли это сделать.

3. df = pd.get_dummies(df, columns=[‘Devices»]) df.head() Попробовал выше, и он создал 27 дополнительных столбцов

4. поместите код под сомнение — он будет более читаемым. И что не так с этим кодом? Вы получаете сообщение об ошибке? Затем покажите это в вопросе. Если вы получите неверный результат, покажите его также под вопросом. Просить Can this be done? вас только тратить время, потому что ответ yes . Но если вы не знаете, как это сделать, то хотя бы покажите, о чем идет речь, что вы пробовали.

5. Можете ли вы сказать мне, как это сделать, вместо того, чтобы писать большую речь. Как я уже сказал в своем вопросе, мне не нужно несколько столбцов, а только 3 столбца. поскольку я не знаю, как это сделать, я спрашиваю.

Ответ №1:

 import pandas as pd
from sklearn.preprocessing import OneHotEncoder

data = {'name': ['Zoe', 'Yvonne', 'Veronique', 'Ruby', 'Mia', 'Matilda', 'Karin', 'Ella', 'Babette', 'Amelia'],
        'phone': ['Apple', 'Samsung', 'Samsung', 'HTC', 'Apple', 'Apple', 'Nokia', 'Samsung', 'Motorola', 'Alcatel'],
        'car': ['Bentley', 'Bugatti', 'Ford', 'Hummer', 'Honda', 'Jaguar', 'Jeep', 'Lamborghini', 'Landrover', 'Pagani']}
df = pd.DataFrame(data)
df
 

Допустим, это часть данных:

     name        phone       car

0   Zoe         Apple       Bentley
1   Yvonne      Samsung     Bugatti
2   Veronique   Samsung     Ford
3   Ruby        HTC         Hummer
4   Mia         Apple       Honda
5   Matilda     Apple       Jaguar
6   Karin       Nokia       Jeep
7   Ella        Samsung     Lamborghini
8   Babette     Motorola    Landrover
9   Amelia      Alcatel     Pagani
 

Во-первых, повторно классифицируйте данные телефона:

 aux = df['phone'].apply(lambda x: x if x in ('Apple', 'Samsung') else 'Other')
 

Затем нанесите get_dummies :

 cat = pd.get_dummies(aux)
 

Наконец, объедините фреймы данных и переупорядочьте столбцы:

 result = pd.concat([df,cat], axis=1)[['name', 'phone', 'Apple', 'Samsung', 'Other', 'car']]
result
 

чтобы получить этот результат:

     name       phone    Apple   Samsung Other   car

0   Zoe        Apple    1       0       0       Bentley
1   Yvonne     Samsung  0       1       0       Bugatti
2   Veronique  Samsung  0       1       0       Ford
3   Ruby       HTC      0       0       1       Hummer
4   Mia        Apple    1       0       0       Honda
5   Matilda    Apple    1       0       0       Jaguar
6   Karin      Nokia    0       0       1       Jeep
7   Ella       Samsung  0       1       0       Lamborghini
8   Babette    Motorola 0       0       1       Landrover
9   Amelia     Alcatel  0       0       1       Pagani
 

Комментарии:

1. Спасибо @lenka_cizkova, это именно то, чего я хотела