Как разделить столбец на отдельные столбцы в CSV-файле? - PullRequest
0 голосов
/ 13 октября 2019

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

вот как выглядит набор данных:

   genres
----------------------------------------------
   [{'id': 16, 'name': 'Animation'}, {'id': 35, 'name': 'Comedy'}, {'id': 10751, 'name': 'Family'}]
   [{'id': 35, 'name': 'Comedy'}, {'id': 10749, 'name': 'Romance'}]
   [{'id': 35, 'name': 'Comedy'}, {'id': 18, 'name': 'Drama'}, {'id': 10749, 'name': 'Romance'}]
   [{'id': 35, 'name': 'Comedy'}]
   [{'id': 28, 'name': 'Action'}, {'id': 80, 'name': 'Crime'}, {'id': 18, 'name': 'Drama'}, {'id': 53, 'name': 'Thriller'}]

Итак, я хочу получить только первый жанр, поэтому новый столбец должен выглядеть следующим образом:

  genres
_____________
  Animation
  Comedy
  Comedy
  Comedy
  Action

enter image description here

Iнадеюсь, это достаточно ясно, чтобы понять мою проблему.

Ответы [ 3 ]

4 голосов
/ 13 октября 2019

Использование DataFrame.apply. Первый словарь в списке выбирается в каждой ячейке. Из этого словаря выбирается поле name:

df['genres']=df['genres'].apply(lambda x: x[0]['name'])
print(df)

   ID     genres
0   0  Animation
1   1     Comedy
2   2     Comedy
3   3     Comedy
4   4     Action

или

df['genres']=df['genres'].apply(lambda x: eval(x)[0]['name'])

ПОПРОБУЙТЕ

def decode_str_dict(x):
    try:
        out=eval(x)[0]['name']
    except:
        try:
            out=eval(x)['name']
        except:
            try:
                out=eval(x)
            except:
                out=x
    return out



df['genres'].apply(decode_str_dict)
3 голосов
/ 13 октября 2019

Это работает, если значения считаются строкой.

from ast import literal_eval

df['genres'] = df.genres.map(lambda x: literal_eval(x)[0]['name'])

Результат:

Out[294]: 
  ID     genres
1  0  Animation
2  1     Comedy
3  2     Comedy
4  3     Comedy
5  4     Action
3 голосов
/ 13 октября 2019
df['genres'] = df['genres'].map(lambda x:[i['name'] for i in x])
df['first_genre'] = df['genres'][0]
df = df[['name','first_genre']]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...