Сопоставление с шаблоном на URL веб-сайта с Pandas фреймом данных - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь решить немного сложный проект с Pattern matching для URL веб-сайта.

У меня есть определенный столбец, который содержит URL с несколькими сведениями, встроенными в URL. Я не получаю это точно, я продолжаю получать ошибки.

Вот пример того, что я пытаюсь решить. У меня есть столбец с именем Page из Google analytics данных. Он содержит строки вроде этой Mywebsite.com/optiona/optionb/type/102/103/107?data=1.2. 1581202800. 1581289200.30

I want to create new columns containing 
the website - Mywebsite.com
option type a - optiona
option type b - optionb
type of product - type
product1 - 102
product2 - 103
product3 - 107

And ?data= in a separate column 
another new column - 1
new3 - 2
starttime - 1581202800
endtime - 1581289200
age - 30

Сначала я попытался разбить их в списке, чтобы мне было легко получить к ним доступ:

df_analytic["Col_for_analysis"] = re.split(r"/",df_analytic["Page"])

Но я получаю: TypeError: expected string or bytes-like object

1 Ответ

2 голосов
/ 03 марта 2020

Удалить данные =, разделить на все, что вы видите:

df_split = df['input'].str.replace('data=', '').str.split(r' |/|\?|\.', expand=True).replace('', np.nan).dropna(how='all', axis=1)
then you can rename your columns as you wish.

Редактировать: я добавил сброс пустых столбцов.

Редактировать2: чтобы учесть отсутствующее имя хоста, разделить отдельно :

df_split1 = df['input'].str.split(r'\?data=', expand=True)
df_left = df_split1.loc[:, 0].str.rsplit(r'/', n=5, expand=True)
df_right = df_split1.loc[:, 1].str.split(r'\.| ', expand=True)

df_left['option_a'] = df_left.iloc[:, 0].str.split(r'/', expand=True).iloc[:, -1].fillna(df_left.iloc[:, 0])
df_left['sitename'] = df_left.iloc[:, 0].apply(lambda x: np.NaN if '/' not in x else re.split(r'/', x)[0])

, затем concat

df = pd.concat([df_left, df_right], axis=1).iloc[:, 1:].replace('', np.nan).dropna(how='all', axis=1)

, затем выполните оставшееся переименование столбцов.

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