Как обрабатывать строки, содержащие несколько тегов (индексных терминов), используя pandas - PullRequest
0 голосов
/ 04 апреля 2020

У меня есть набор данных, в котором один конкретный столбец ('Genres') содержит строки с несколькими тегами, разделенными запятыми.

Это набор данных.

I нужно обработать эти строки для извлечения данных. Есть ли способ очистить этот столбец, чтобы получить правильные значения для работы?

Ответы [ 2 ]

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

Вы можете

df['Genre'].str.split(",", n=1, expand=True)

поставить значение n по своему выбору, оно будет разделено на это количество "," Затем выберите столбец, который вы хотите

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

Строки в вашем столбце Genres должны быть списками тегов. Чтобы иметь возможность работать с этими данными, я бы рекомендовал превратить их в факторы, то есть создать отдельный столбец для каждого тега, который указывает, к каким строкам применяется тег. Вы можете сделать это следующим образом:

import pandas as pd

# small subset of your data for demonstration
df = pd.DataFrame({'Name': ['Sudoku', 'Reversi', 'Morocco'], 
                   'Genres': ['Games, Strategy, Puzzle', 
                              'Games, Strategy, Board', 
                              'Games, Board, Strategy']})
display(df)
    Name        Genres
0   Sudoku      Games, Strategy, Puzzle
1   Reversi     Games, Strategy, Board
2   Morocco     Games, Board, Strategy
# split each of the strings into a list
df['Genres'] = df['Genres'].str.split(pat=',')

# collect all unique tags from those lists
tags = set(df['Genres'].explode().values)

# create a new Boolean column for each tag
for tag in tags:
    df[tag] = [tag in df['Genres'].loc[i] for i in df.index]

display(df)
    Name     Genres                     Board   Games   Puzzle  Strategy
0   Sudoku   [Games, Strategy, Puzzle]  False   True    True    True
1   Reversi  [Games, Strategy, Board]   True    True    False   True
2   Morocco  [Games, Board, Strategy]   True    True    False   True

Обратите внимание, что этот код не оптимизирован для скорости. Я просто хотел показать, как это можно сделать.

...