Форум программистов, компьютерный форум, киберфорум
Python: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 0
Регистрация: 17.04.2020
Сообщений: 58

Кодирование категориальных признаков

29.08.2023, 05:41. Показов 1280. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть датафрейм по кредитным данным клиентов с 21 столбцом и 1000 строк. В каждом столбце один тип данных. Есть столбцы, как с количественными данными, так и с категориальными. Один из примеров столбец checking_status, в нём есть следующие уникальные значения: '<0'; '0<=X<200'; 'no checking'; '>=200'
Я хотел каждый столбец с категориальными данными типа str перевести в числовые по типу:
'no checking' = 0; '<0' = 1 и тд
Знаю о Label Encoding и One hot encoding, но первый не сработал, а второй не очень подходит, написал такую функцию, но она не работает
Сама функкция:
lst-это список уникальных значений каждого столбца
col_name-название каждого столбца
changed_df-копия датафрейма
Также могу дать ссылку на проект jupyter notebook через nbviewer

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def change_data(lst, col_name):
    for i in range(len(lst)):
        all_str = all(isinstance(item, str) for item in lst[i])
        print(all_str)
        if all_str == True:
            quan = len(lst[i])
            print(quan)
            print(t)
            t = 0
            replacement_dict = {}
            while quan > t + 1:
                replacement_dict[lst[i][t]] = t
                print(replacement)
            changed_df[col_name[i]] = changed_df[col_name[i]].replace(replacement_dict)
        else:
            continue
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.08.2023, 05:41
Ответы с готовыми решениями:

Выбор статистики при трех категориальных данных
Доброго времени суток. Есть два входных фактора: Edu- Образование , Occupation - Занятие Выходной фактор: Home_Type - Тип...

Кодирование и декодирование. Дельта-кодирование
Привет всем. Есть задача: &quot;Написать две программы для кодирования и декодирования, с помощью алгоритма дельта-кодирования&quot; помогите...

Типы признаков
В сфере интеллектуальной деятельности различают два типа признаков (2, Ⅱ): включительные и отличительные. Существуют-ли другие...

3
 Аватар для GennDALF
15 / 14 / 2
Регистрация: 24.09.2009
Сообщений: 68
30.08.2023, 08:15
Лучший ответ Сообщение было отмечено Helpplease как решение

Решение

replace() – это строковый метод, генерирует строку на основе той, от которой вызван, заменяя в ней одну подстроку на другую, возвращает новый объект str

Если количество уникальных значений невелико, то определите словарь, в котором задайте соответствие между уникальным значением (объект str) и новым значением, числовым кодом, или что там вам требуется (объект int).
Далее, подмените значения в столбцах.
Python
1
2
3
4
5
6
7
8
9
10
11
categories_codes = {
    'no checking' = 0,
    '<0' = 1,
    ...
}
 
for column in changed_df:
    map(
        lambda key: changed_df[column][key] = categories_codes[key],
        changed_df
    )
Альтернативно, если ваши числовые коды не произвольны, а являются элементами арифметической прогрессии, то можно получить списки старых значений в каждом столбце, отсортированные по возрастанию нового значения. Далее воспользоваться встроенными функциями enumerate() или range()
Тогда не нужно будет объявлять словарь.

В каждом столбце один тип данных. Есть столбцы, как с количественными данными, так и с категориальными.
Для того, чтобы писать код, надо бы вести речь о структуре датафрейма с точки зрения типов объектов, а не с точки зрения семантической структуры. Последняя нужна для проектирования.
1
1 / 1 / 0
Регистрация: 17.04.2020
Сообщений: 58
31.08.2023, 00:00  [ТС]
Да, прошу прощения, забыл указать, что в коде я создал пустой словарь с названием replacement_dict, которую можно наблюдать в 12 и 14 строках
Я пытался реализовать следующую логику: функция принимает на вход lst-список списков с уникальными значениями и col_name- название каждого списка с уникальными значениями(оба объекта так отсортированы, что подходят друг ко другу).
Так как мне нужно закодировать только столбцы с типом str, а не c int или float, делается проверка на тип данных в списке с уникальными значениями
Python
1
all_str = all(isinstance(item, str) for item in lst[i])
Если они все типа int, то срабатывает continue и запускается другая итерация, если же все объекты в списке типа str, подсчитывается количество элементов в списке и называется quant, также задаётся счётчик t, затем цикл while, в котором я и делаю наполнение словаря
Python
1
replacement_dict[lst[i][t]] = t
0
 Аватар для GennDALF
15 / 14 / 2
Регистрация: 24.09.2009
Сообщений: 68
31.08.2023, 12:16
Helpplease,
Цитата Сообщение от Helpplease Посмотреть сообщение
функция принимает на вход lst-список списков с уникальными значениями и col_name- название каждого списка с уникальными значениями(оба объекта так отсортированы, что подходят друг ко другу)
Именно для этого и существуют словари – задавать соответствие между объектами.

Элементом словаря является пара объектов: ключ и значение.
Ключами словаря могут любые хэшируемые объекты – если говорить о базовых типах, то это неизменяемые: int, float, complex, bytes, str, range, tuple, frozenset.
Значениями словаря могут быть произвольные объекты, включая списки, множества и другие словари.

Цитата Сообщение от Helpplease Посмотреть сообщение
делается проверка на тип данных
Лишние проверки – дольше выполнение. Если есть возможность корректно написать фрагмент кода без условной конструкции, то в большинстве случаев этим стоит воспользоваться.
Пример в моём прошлом сообщении избавляет от необходимости выполнять проверку. Но взамен требует корректного словаря, в котором старые и новые значения сопоставляются друг другу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.08.2023, 12:16
Помогаю со студенческими работами здесь

База признаков
4300 признаков для парсинга Google-Yahoo-MSN. Без повторов. Без подстановок site:.com и т.д. База обновляется каждые 10 дней. АПДЕЙТЫ...

Классификация признаков
Какой есть алгоритм для классификации признаков встроенных в matlab или не встроенных?

Отбор значимых признаков
Есть матрица признаков изображений, где строки - это изображения, а столбцы - их признаки. Задача отобрать признаки, которые являются...

Ранжирование признаков по возрастанию
Нужно написать функцию ранжирования массива(или списка) как в таблице минимальному элементу 1 и так далее. (Сортировать массив(список)...

R9 380 Не подает признаков жизни
Доброго времени суток, недавно мною была куплена видеокарта : R9 380 Sapphire Nitro(бу) . Отправлена она была Почтой России, и у...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru