我正在对电影进行分析,每部电影都有一个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'},
]问题是,我该如何分析这个问题?例如,我如何知道这里有多少个动作莫视图,以及如何查询类别操作?具体地说:
genre转换成array吗?目前,我可以用df[df['genre'].str.contains("Action")].describe()解决第二个问题,但是有更好的语法吗?
发布于 2016-10-07 01:49:37
如果你的数据不是太大,我会做一些预处理,并得到一个记录每种类型。也就是说,我会像这样构造你的数据框架:
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在这种格式中,您的三个问题将变成
请参阅How to count number of rows in a group in pandas group by object?
请参阅pandas: filter rows of DataFrame with operator chaining
你的数据去正常化应该能处理好。
https://stackoverflow.com/questions/39907720
复制相似问题