项目指南 - 数据框架的多个简历/修改

时间:2016-07-19 06:55:24

标签: python csv dataframe

在让我的神经受损之前,只是一个关于指导的快速问题! :)

我有多个CSV文件,我想合并到一个BIG新CSV文件。

所有文件都具有相同的确切结构:

Muzicast V2;;;;;;;;
Zoom mÈdia sur Virgin Radio;;;;;;;;;
Sem. 16 : Du 15 avril 2016 au  21 avril 2016;;;;;;;;;
;;;;;;;;;
;;;;;;;;;
TOP 40;;;;;;;;;
Rg;Evo.;Rg-1;Artiste;Titre;Genre;Label;Audience;Nb.Diffs;Nb.Sem
1;+3;4;Twenty One Pilots;Stressed out;Pop/Rock International;WEA;5 982 000;56;18
2;+1;3;Coldplay;Hymn for the weekend;Pop/Rock International;WEA;5 933 000;55;13
3;-2;1;Imany;Don't be so shy (Filatov & Karas remix);Dance;THINK ZIK;5 354 000;55;7
4;-2;2;Lukas Graham;7 years;Pop/Rock International;POLYDOR;5 927 000;54;16
5; =;5;Justin Bieber;Love yourself;Pop/Rock International;MERCURY GROUP;5 481 000;49;21

所有cvs文件都具有相同的格式。 我想要 :   - 一个接一个地打开每个文件/忽略10个第一行   - 使用“;”获取所有信息作为分隔符   - 在每行的开头插入变量
  - 使用每个文件中的所有信息写入新文件。

我设法打开一个文件并进行了我需要的更改:

handle = open(file_dir+'/'+'virgin092016.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[5]
   results.append(line)

   df = pd.DataFrame(results)

print df 

我设法打开多个文件并创建一个DataFrame =

file_dir = "VIRGIN"
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
    current_df = current_df

    main_df = pd.concat([main_df,current_df],ignore_index=True)

print main_df

但是现在我有一个问题是试图同时做这两件事。

我错过了一个部分,我认为这是因为我不确定我必须执行代码的顺序。

我是否必须打开一个文件进行更改,然后直接写入MAIN.CSV(将包含所有文件的最终信息),然后执行DataFrame 或者我应该打开一个文件>做一个数据框,然后进行我需要的更改。

我是蟒蛇新手...参加多个在线课程和阅读书籍....但我觉得我的思维方式仍然不是真正的“pythonic”。

非常感谢帮助。 感谢

1 个答案:

答案 0 :(得分:0)

我假设您的所有csv文件都在"./data/"中,在main_dir中定义,并且所有csv的总和不超过您的RAM内存。诀窍是使用临时变量current_df,然后将其附加到final_df的最终数据框pd.concat

import os
import pandas as pd

main_dir = "./data/"
all_files = os.listdir(main_dir)

for i, file_name in enumerate(all_files):
    current_df = pd.read_csv(main_dir+file_name,
                             sep=";",
                             skiprows=10)

    #add here whatever information you need to your dataframe
    #dump the results into a separate file with current_df.to_csv()

    if i == 0:
        final_df = current_df
    else:
        final_df = pd.concat([final_df, current_df], axis=0)