2016-12-06 4 views
0

Ich versuche, mehrere CSV-Dateien in eine einzige große CSV für mein Dataset zusammenzuführen. Was ich suche, ist, einige Spaltendaten von mehreren CVS-Dateien zu holen und einen Datensatz daraus zu machen. Ich möchte nicht alle Spalten in meinen endgültigen Datensätzen, sondern nur wenige ausgewählte. Ich habe names Attribut in Panda beim Lesen von CSV verwendet und es ist in Ordnung, aber ich bin nicht in der Lage, eine neue CSV aus den abgerufenen zu erstellen. Was mache ich hier falsch? Ich habe den Stack-Trace am unteren Rand hinzugefügt.Panda to_csv(): TypeError: Erzwinge Unicode: brauche String oder Puffer, Liste gefunden

import glob 
import pandas as pd 
import os 
import time 
from datetime import datetime 
import numpy as np 

path = "C:\Users\lenovo\Downloads\Compressed\LoanStats3a.csv_2\csv" 
class MergeCsvFiles: 
def MergeCsv(self): 
    allFiles = glob.glob(os.path.join(path, "LoanStats3a.csv")) 
    print 'allFiles',allFiles 

    for file_ in allFiles: 
     print 'file_ ######### ',file_ 

     # merge_df = pd.DataFrame.from_csv(file_) 
     # print merge_df 
     fileToSave = glob.glob(os.path.join(path, "merge.csv")) 
     print 'filrToSave #### ', fileToSave 
     np_array_list = [] 

     df = pd.read_csv(file_, skipinitialspace=True,low_memory=False,header=0,index_col=None) 
     np_array_list.append(df.as_matrix()) 
     comb_np_array = np.vstack(np_array_list) 
     big_frame = pd.DataFrame(comb_np_array) 
     # big_frame.columns = fields 
     print 'big_frame#### ', big_frame 
     big_frame.to_csv(fileToSave) 

     # See the keys 
     print 'df.keys########',df.keys() 
     print 'df @@@@@', df 
     frame = pd.DataFrame() 
     list_ = [] 

     list_.append(df) 
     frame = pd.concat(list_) 
     # print 'frame#### ',frame 

     frame.to_csv(fileToSave) 

if __name__ == "__main__": 
    s = MergeCsvFiles() 
    s.MergeCsv() 

Stacktrace:

Traceback (most recent call last): 
    File "C:/Users/lenovo/Downloads/Video/Machine Learning/MLPredictiveAnalysis/MergeCsv.py", line 59, in <module> 
    s.MergeCsv() 
    File "C:/Users/lenovo/Downloads/Video/Machine Learning/MLPredictiveAnalysis/MergeCsv.py", line 39, in MergeCsv 
    big_frame.to_csv(fileToSave) 
    File "C:\Python27\lib\site-packages\pandas\core\frame.py", line 1344, in to_csv 
    formatter.save() 
    File "C:\Python27\lib\site-packages\pandas\formats\format.py", line 1526, in save 
    compression=self.compression) 
    File "C:\Python27\lib\site-packages\pandas\io\common.py", line 426, in _get_handle 
    f = open(path, mode) 
TypeError: coercing to Unicode: need string or buffer, list found 
+1

'glob.glob' gibt eine Liste zurück. Sie müssen eine Zeichenfolge des Pfadnamens an 'big_frame.csv' übergeben. Warum brauchst du überhaupt Glob? 'big_frame.csv (os.path.join (Pfad," merge.csv "))' sollte funktionieren –

+0

Danke.Es hat funktioniert. – Cyclotron3x3

Antwort

1

glob.glob gibt eine Liste. Sie müssen eine Zeichenfolge des Pfadnamens an big_frame.csv übergeben. Warum brauchst du überhaupt Glob? big_frame.csv(os.path.join(path, "merge.csv")) sollte funktionieren.

Sie schreiben diese Datei auch mit frame.to_csv(fileToSave) am Ende Ihrer Schleife. Und jede Iteration schreibt die Datei auch so, dass nur die letzte Iteration jede Datei speichert.

Verwandte Themen