@lolaevv
В процессе изучения азов JAVA

Как разделить данные в строке Pandas?

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

В датафрейме имеется столбец с жанрами, разделенными данным знаком |.
Хочу преобразовать свои данные так, чтобы в моем датафрейме каждая строка имела лишь один жанр и пусть фильмы будут повторятся, потом я просто буду удобно группировать данные по названию фильма.
В голове лишь вертится применение функции split, но дальше продолжить идею я не могу
5f242da294793948612067.jpeg
  • Вопрос задан
  • 72 просмотра
Решения вопроса 1
LazyTalent
@LazyTalent
Data Engineer, Freelancer
>>> import pandas as pd
>>> df = pd.DataFrame([['123', 'Anime|Action'], ['321', 'Adventure|Comedy']], columns=['title', 'genre'])
>>> df
  title             genre
0   123      Anime|Action
1   321  Adventure|Comedy
>>> df['genre'] = df['genre'].apply(lambda x: x.split('|'))
>>> df
  title                genre
0   123      [Anime, Action]
1   321  [Adventure, Comedy]
>>> df.explode('genre')
  title      genre
0   123      Anime
0   123     Action
1   321  Adventure
1   321     Comedy

pandas.DataFrame.explode
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@PavelMos
Имхо целесообразнее сделать атрибуты вроде "являяется ли комедией ? да/нет (1/0)", для этого ввести доп. столбцы. Если дублировать строки, то также сильно увеличится размер датафрейма.

import pandas
df1=pandas.DataFrame.from_records((
    (1, 'xxx', 'Adv|Ani|Doc'),
    (2, 'yyy', 'Adv|Doc'),
    (3, 'zzz', 'Comedy|Doc')),
columns=['movieId','title','genres'])
genres_list=('Adv','Ani','Doc','Comedy')
for i in genres_list:
    df1[i]=[0]*len(df1) #сначала прописать всем нули
print (df1)
for idx, row in df1.iterrows():
    c=(row[2])
    l=c.split('|')
    for g in genres_list:
        if g in l:
            df1.loc[idx, g]=1
print (df1)
   movieId title       genres  Adv  Ani  Doc  Comedy
0        1   xxx  Adv|Ani|Doc    0    0    0       0
1        2   yyy      Adv|Doc    0    0    0       0
2        3   zzz   Comedy|Doc    0    0    0       0
   movieId title       genres  Adv  Ani  Doc  Comedy
0        1   xxx  Adv|Ani|Doc    1    1    1       0
1        2   yyy      Adv|Doc    1    0    1       0
2        3   zzz   Comedy|Doc    0    0    1       1
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Платформа НТИ Москва
от 130 000 до 170 000 ₽
Weigandt Consulting Санкт-Петербург
от 180 000 до 260 000 ₽
Sportmaster Lab Москва
от 150 000 до 260 000 ₽