2016-12-06 2 views
0

Я пытаюсь объединить несколько файлов CSV в один большой CSV для моего набора данных. Я ищу, чтобы получить несколько данных из нескольких файлов CVS и сделать из него набор данных. Мне не нужны все столбцы в моих конечных наборах данных, но несколько выбранных. Я использовал атрибут names в panda при чтении CSV, и он возвращается хорошо, но я не могу создать новый CSV из выбранных. Что я здесь делаю неправильно? Я добавил трассировку стека внизу.Panda to_csv(): TypeError: принуждение к Unicode: нужна строка или буфер, список найден

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' возвращает список. Вам нужно передать строку имени пути в 'big_frame.csv'. Зачем вам нужен глобус? 'big_frame.csv (os.path.join (путь," merge.csv "))' должен работать –

+0

Спасибо. Это сработало. – Cyclotron3x3

ответ

1

glob.glob возвращает список. Вам нужно передать строку имени пути в файл big_frame.csv. Зачем вам нужен глобус? big_frame.csv(os.path.join(path, "merge.csv")) должен работать.

Вы также записываете этот файл с frame.to_csv(fileToSave) в нижней части цикла. И каждая итерация записывает файл, так что только последняя итерация сохранит любой файл.

Смежные вопросы