2017-11-12 4 views
1

Ich versuche, eine Filmdatenbank mit Python3 zu analysieren. Wie kann ich Genres eines Films mit verschiedenen Variablen analysieren. Zum Beispiel:Parsing CSV-Datei mit Pandas in Python3

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

erste Wert ist movie_id, zweite ist MOVIE_NAME und die dritten Werte sind Genres, aber ich möchte, dass sie analysieren als separate diejenigen gehört zu den entsprechenden Film Zugriffe auf Variablen. Mit anderen Worten, ich möchte den zweiten seperator zu meiner Datenbank als "|". Wie kann ich das erreichen? Hier ist mein Code:

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

Antwort

2

Sie Separator ,| verwenden können, aber ist notwendig, erste Reihe müssen enthält alle möglichen Genres:

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 

Aber hier ist besser neue Spalten von Kategorien erstellen und auf 1 wenn Kategorie von get_dummies in Reihe vorhanden sind und zu den ursprünglichen Spalten von join hinzufügen:

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 

Aber wenn Bedarf Spalten besteht die Möglichkeit, split von |:

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