2016-07-03 17 views
-2

Ich habe viele CSV-Dateien (eine für jede Woche), die wie die Suche Daten enthalten:Listen Datenrahmen für Pandas

Rank;Artist;Track;Label;Audience 
1;Drake feat. WizKid & Kyla;One Dance;UNIVERSAL; 2001401 

es ist ein Top 40 Radio Playlist Woche - ich habe 3 Jahre Daten.

Ich versuche, diese CSV-Datei der Zeichenfolge getrennt durch ; die Woche des Jahres + das Jahr am Anfang hinzufügen, transformieren Sie es in eine Liste und dann zu einem Dataframe, um sie anschließend zu manipulieren.

zu erhalten:

week;year;Rank;Artist;Track;Label;Audience 
1;Drake feat. WizKid & Kyla;One Dance;UNIVERSAL; 2001401 

Ich möchte danach viele CSV-Dateien, fügen Sie alle diese zu einem großen CSV-Datei und in der Lage zu überprüfen, sofort die Top 40 für eine Woche und suchen danach alle importieren Wochen, in denen ein bestimmter Titel wiedergabeliert wurde, und können die Entwicklung des Publikums in Matplotlib für einen Titel verfolgen.

Ich habe es geschafft, eine CSV-Dateien zu importieren und Listen zu erstellen, aber ich kann es nicht in Pandas als DataFrame setzen, um den Datenrahmen für eine Woche zu sehen.

Hier ist mein Code:

import csv 
import pandas as pd 
import numpy as np 


handle = open('virgin122016.csv','r') 
results = [] 

for line in handle : 
    line = '12;2016;'+line 
    line = line.lower() 
    line = line.strip() 
    line = line.split(';') 
    line = line[0],line[1],line[2], line [3], line[4],line[5],line[6],line[7] 
    results.append(line) 

df = pd.DataFrame(results) 
print df 

Ergebnis:

IndentationError: unindent does not match any outer indentation level 

Wie würden Sie empfehlen auf Indizes/lists/Datenrahmen zu arbeiten, und warum nervt mein Code?

+2

Warum Sie nicht nur 'verwenden pandas.read_csv' zusammen? Soweit der Fehler geht, schauen Sie sich Ihre letzten zwei Zeilen an, sie sind nicht auf der gleichen Einrückungsebene wie die * für * –

+0

Indentation Angelegenheiten in Python. Viel. –

Antwort

1

Pandas kann Dateien verarbeiten, die durch andere Zeichen als Komma getrennt sind, wenn Sie den Parameter sep verwenden. das heißt pd.read_csv("filename.txt",sep=";")

Das Stück Code unten soll Ihnen helfen, durch eine Liste von Dateien aus in file_dir und verbinden alle dataframes zusammen sowie das Hinzufügen einer Spalte angibt, welche file eine bestimmte Zeile kam laufen.

file_dir = "C:\\Users\\User\\testingfolder" 
main_df = pd.DataFrame() 
for i, file_name in enumerate(os.listdir(file_dir)): 
    if i == 0: 
     main_df = pd.read_csv(file_dir + "\\" + file_name, sep=";") 
     main_df["file_name"] = file_name 
    else: 
     current_df = pd.read_csv(file_dir + "\\" + file_name, sep=";") 
     current_df["file_name"] = file_name 
     main_df = pd.concat([main_df,current_df],ignore_index=True) 
print main_df 

Ausgang:

num city inc pop edu crime cult file_name 
0 1 Africa 29343 8683 0 10.4  1 data.csv 
1 1 Moscow 29343 8683 0 10.4  1 data1.csv 
2 2 Paris 25896 17496 0 10.2  3 data1.csv 
3 3 Paris2 25896 17496 0 10.2  3 data1.csv 
4 4 Paris3 25896 17496 0 10.2  0 data1.csv