Получить фиктивные переменные из столбца строки, полной беспорядка - PullRequest
0 голосов
/ 10 апреля 2020

Я начинающий менее чем в неделю по Python и наукам о данных, поэтому, пожалуйста, прости меня, если эти вопросы кажутся очевидными.

Я собрал данные на веб-сайте, но результат, к сожалению, не очень хорошо отформатирован, и я не могу использовать его без преобразования.

Мои данные

У меня есть строковый столбец, который содержит множество функций, которые я хотел бы преобразовать в фиктивные переменные.

Пример строки : "8 команд & optionsextérieur et châssisjantes aluintérieurBluetoothfermeture électrique5 placessécuritékit téléphone главная библиотека Что я хотел бы сделать

Я хотел бы создать фиктивный столбец «Bluetooth», который был бы равен единице, если в строке содержится шаблон «bluetooth», и нулю, если нет.

Я хотел бы создать другой фиктивный столбец "Климатизация", который был бы равен единице, если бы содержался шаблон "климатизация" в строке и ноль, если нет.

... et c

И сделайте это для 5 или 6 моделей, которые меня интересуют.

Что Я попытался

Я хотел использовать тест на совпадение с регулярными выражениями и объединить его с методом pd.getdummies.

import re
import pandas as pd

def match(My_pattern,My_strng):
    m=re.search(My_pattern,My_strng)
    if m:
        return True
    else:
        return False

pd.getdummies(df["My messy strings colum"], ...)

Мне не удалось найти, как чтобы определить аргументы pd.getdummies для определения теста, который я хотел бы применить к столбцу.

Мне даже было интересно, будет ли это лучшая стратегия, и не будет ли проще создать другие столбцы параллелей и применить match.group () в моих грязных строках, чтобы заполнить их. Не уверен, что я все равно знаю, как это программировать.

Спасибо за вашу помощь

1 Ответ

0 голосов
/ 10 апреля 2020

Я думаю, что один из способов сделать это был бы:

df.loc[df['My messy strings colum'].str.contains("bluetooth", na=False),'Bluetooth'] = 1
df.loc[~(df['My messy strings colum'].str.contains("bluetooth", na=False)),'Bluetooth'] = 0

df.loc[df['My messy strings colum'].str.contains("climatisation", na=False),'Climatisation'] = 1
df.loc[~(df['My messy strings colum'].str.contains("climatisation", na=False)),'Climatisation'] = 0

Тильда (~) представляет , а не , поэтому в данном случае условие меняется на строковое : не содержит .

na = false означает, что если ваш грязный столбец содержит нулевые значения, они не вызовут ошибку, а будут считаться, что они не удовлетворяют условию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...