Создание нового DataFrame с использованием вывода списка, полученного из существующего DataFrame - PullRequest
0 голосов
/ 04 февраля 2019

Используя функцию .tolist (), я создал список 'genrelist'.

genrelist = movies_1000.Genre.str.split().tolist()
print(genrelist)

Вставив полученный вывод: -

[['Action,Crime,Drama'], ['Action,Adventure,Sci-Fi'], 
['Action,Biography,Drama'], ['Adventure,Drama,Sci-Fi'], 
['Animation,Drama,Fantasy'], ['Biography,Comedy,Drama'], 
['Drama,Music'], ['Drama,Mystery,Sci-Fi'], ['Crime,Drama,Thriller'], 
['Drama,Family,Music'], ['Action,Thriller'], ['Drama,Thriller'], 
['Animation,Adventure,Family'], ['Comedy,Drama'], 
['Animation,Drama,Romance']]

Затем я использовал следующеефункция для получения уникальных предметов из этого вложенного списка.

genrecount = Counter()
for arr in genrelist:
    genrecount.update(arr[0].split(','))

print(genrecount)

Вставка полученного результата: -

Counter({'Drama': 12, 'Action': 4, 'Adventure': 3, 'Sci-Fi': 3, 
'Animation': 3, 'Thriller': 3, 'Crime': 2, 'Biography': 2, 'Comedy': 
2, 'Music': 2, 'Family': 2, 'Fantasy': 1, 'Mystery': 1, 'Romance': 
1})

Я хотел бы использовать полученный выше вывод для создания новогоDataFrame.Поэтому я использовал следующее: -

genre_df = pd.DataFrame(genrecount.items())

Вставка полученной ошибки: -

ValueError: DataFrame constructor not properly called!

Также пробовал без .items следующим образом: -

genre_df = pd.DataFrame(genrecount.items())

Вставка полученной ошибки: -

ValueError: If using all scalar values, you must pass an index

Итак, я пытаюсь создать новый DataFrame из вывода genrecount, полученного выше.Пожалуйста, посоветуйте, что можно использовать для получения желаемого результата и как правильно маркировать столбцы как Жанр и Количество.Я считаю, что слово Counter в выводе genrecount создает всю суету.Но не знаю, как это исправить.

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

[['Action',' Crime','  Drama'], ['Action','  Adventure','Sci-Fi'], 
['  Action',' Biography','Drama'], ['Adventure','Drama',' Sci-Fi'], 
['Animation','Drama','Fantasy'], ['Biography',' Comedy',' Drama'], 
['Drama','   Music   '], ['Drama','Mystery','  Sci-Fi'], 
['Crime  ','Drama',' Thriller'], ['Drama', ' Family ' ,' Music'], 
['Action', 'Thriller'], ['Drama',' Thriller'], 
['Animation',' Adventure',' Family'], ['Comedy',' Drama'], 
['Animation',' Drama',' Romance']]

Спасибозаранее ..!

1 Ответ

0 голосов
/ 04 февраля 2019

Как предлагается в моем комментарии, вы можете использовать функцию from_dict(), так как Counter является подклассом dicts.Вот полный пример:

import pandas as pd
from collections import Counter

genrecount = Counter({'Drama': 12, 'Action': 4, 'Adventure': 3, 'Sci-Fi': 3, 'Animation': 3, 'Thriller': 3, 'Crime': 2, 'Biography': 2, 'Comedy': 2, 'Music': 2, 'Family': 2, 'Fantasy': 1, 'Mystery': 1, 'Romance': 1})

genre_df = pd.DataFrame.from_dict(genrecount.items())
genre_df.columns = ["genre", "count"]

print genre_df

Вывод:

        genre  count
0     Mystery      1
1     Romance      1
2      Sci-Fi      3
3      Family      2
4   Biography      2
5       Crime      2
6       Drama     12
7     Fantasy      1
8   Animation      3
9       Music      2
10  Adventure      3
11     Action      4
12     Comedy      2
13   Thriller      3
...