我正在对电影进行分析,每部电影都有genre
属性,可能是几种特定的类型,如drama
,comedy
,数据看起来像这样:
movie_list = [
{'name': 'Movie 1',
'genre' :'Action, Fantasy, Horror'},
{'name': 'Movie 2',
'genre' :'Action, Comedy, Family'},
{'name': 'Movie 3',
'genre' :'Biography, Drama'},
{'name': 'Movie 4',
'genre' :'Biography, Drama, Romance'},
{'name': 'Movie 5',
'genre' :'Drama'},
{'name': 'Movie 6',
'genre' :'Documentary'},
]
问题在于,我该如何对此进行分析?例如,我如何知道这里有多少动作视图,以及如何查询类别动作?具体做法是:
如何获取此列表中的所有类别?所以我知道每个包含多少moviews
如何查询某种类型的电影,例如动作?
我是否需要将genre
变为array
?
目前我可以使用df[df['genre'].str.contains("Action")].describe()
摆脱第二个问题,但是有更好的语法吗?
答案 0 :(得分:0)
如果您的数据不是太大,我会做一些预处理并获得每种类型的1条记录。也就是说,我会像这样构建你的数据框:
Name Genre
Movie 1 Action
Movie 1 Fantasy
Movie 1 Horor
...
注意应重复这些名称。虽然这可能会使您的数据集更大,但如果您的系统可以处理它,它可以使数据分析变得非常容易。 使用以下代码进行转换:
import pandas as pd
def reformat_movie_list(movies):
name = []
genre = []
result = pd.DataFrame()
for movie in movies:
movie_name = movie["name"]
movie_genres = movie["genre"].split(",")
for movie_genre in movie_genres:
name.append(movie_name.strip())
genre.append(movie_genre.strip())
result["name"] = name
result["genre"] = genre
return result
在此格式中,您的3个问题将成为
如何获取此列表中的所有类别?所以我知道每部电影包含多少部分?
movie_df.groupby("类型&#34)。AGG("计数&#34)
请参阅How to count number of rows in a group in pandas group by object?
如何查询某种类型的电影,例如动作?
horror_movies = movie_df [movie_df [" genre"] =="恐怖"]
请参阅pandas: filter rows of DataFrame with operator chaining
您的数据去标准化应该处理它。