2016-07-03 5 views
-2

У меня есть много CSV файлов (по одному на каждую неделю), которые содержат данные, выглядящие так:Списки в DataFrame для панд

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

это Top плейлист 40 радио за одну неделю - У меня есть данные 3-х лет.

Я пытаюсь импортировать этот CSV-файл строки, разделенный ;, добавить неделю года + год в начале, преобразовать его в список, а затем в Dataframe, чтобы иметь возможность манипулировать ими впоследствии.

получить:

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

Я хочу потом импортировать множество CSV файлов, добавьте все это в один большой файл CSV и быть в состоянии проверить мгновенно Top 40 в течение недели и искать потом все недель, когда определенный трек был плейлистом и ему удалось увидеть эволюцию аудитории в Matplotlib для одного трека.

Мне удалось импортировать CSV-файлы и составить списки, но я не могу помещать их в pandas как DataFrame, чтобы увидеть кадр данных в течение недели.

Вот мой код:

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 

Результат:

IndentationError: unindent does not match any outer indentation level 

Как бы вы рекомендовали работать на индексы/списки/DataFrames, и почему пристанет мой код?

+2

Почему вы не просто использовать 'pandas.read_csv' вообще? Что касается ошибки, посмотрите на свои последние две строки, они не совпадают с уровнем отступов, так как * для * –

+0

Отступы имеют значение в Python. Много. –

ответ

1

Pandas имеет возможность обрабатывать файлы данных, разделенные символами, отличными от запятых, если вы используете параметр sep. т.е. pd.read_csv("filename.txt",sep=";")

Кусок кода ниже должна помочь вам перебирать список файлов в file_dir и присоединиться все в dataframes вместе, а также добавление столбца, указывающий, какой file конкретная строка взялось.

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 

Выход:

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 
Смежные вопросы