2017-11-12 7 views
1

Python3でムービーデータベースを解析しようとしています。 映画のジャンルをさまざまな変数で解析するにはどうすればよいですか? 例えば:Python3でPandasでCSVファイルを解析する

1,Toy Story (1995),Adventure|Animation|Children|Comedy|Fantasy 
2,Jumanji (1995),Adventure|Children|Fantasy 

最初の値がmovie_idあり、第二はMOVIE_NAME、3番目の値はジャンルですが、私は別々のものは映画を対応に属しvariblesとしてそれらを解析します。言い換えれば、私は2番目のセパレータをデータベースに "|"として欲しいです。どうすればこれを達成できますか?可能なすべてのジャンルが含まれているためにしているあなたは、セパレータ,|を使用することができます

import numpy as np 
import pandas as pd 
header = ["movie_id", "title", "genres"] 
movie_db = pd.read_csv("movielens/movies.csv", sep=",", names=header) 

答えて

2

が、必要な最初の行です:

df = pd.read_csv("movielens/movies.csv", sep="[,|]", header=None, engine='python') 
print (df) 
    0     1   2   3   4  5  6 
0 1 Toy Story (1995) Adventure Animation Children Comedy Fantasy 
1 2 Jumanji (1995) Adventure Children Fantasy None  None 

しかし、ここでは、より良いカテゴリで新しい列を作成し、1に設定した場合されてここに私のコードですカテゴリはget_dummiesによって行に存在し、joinによって元の列に追加:

movie_db = pd.read_csv("movielens/movies.csv", sep=",", names=header) 
df = movie_db.join(movie_db.pop('genres').str.get_dummies()) 
print (df) 
    movie_id    title Adventure Animation Children Comedy Fantasy 
0   1 Toy Story (1995)   1   1   1  1  1 
1   2 Jumanji (1995)   1   0   1  0  1 

しかし、必要な列が使用可能性が|によってsplitされている場合:

df = movie_db.join(movie_db.pop('genres').str.split('|', expand=True)) 
print (df) 
    movie_id    title   0   1   2  3  4 
0   1 Toy Story (1995) Adventure Animation Children Comedy Fantasy 
1   2 Jumanji (1995) Adventure Children Fantasy None  None 
関連する問題