熊猫:如何对阵列式场进行分析?

时间:2016-10-07 00:45:22

标签: python pandas statistics

我正在对电影进行分析,每部电影都有genre属性,可能是几种特定的类型,如dramacomedy,数据看起来像这样:

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'},
]

问题在于,我该如何对此进行分析?例如,我如何知道这里有多少动作视图,以及如何查询类别动作?具体做法是:

  1. 如何获取此列表中的所有类别?所以我知道每个包含多少moviews

  2. 如何查询某种类型的电影,例如动作?

  3. 我是否需要将genre变为array

  4. 目前我可以使用df[df['genre'].str.contains("Action")].describe()摆脱第二个问题,但是有更好的语法吗?

1 个答案:

答案 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个问题将成为

  1. 如何获取此列表中的所有类别?所以我知道每部电影包含多少部分?

    movie_df.groupby("类型&#34)。AGG("计数&#34)

  2. 请参阅How to count number of rows in a group in pandas group by object?

    1. 如何查询某种类型的电影,例如动作?

      horror_movies = movie_df [movie_df [" genre"] =="恐怖"]

    2. 请参阅pandas: filter rows of DataFrame with operator chaining

      1. 我是否需要将类型转换为数组?
      2. 您的数据去标准化应该处理它。