2016-12-06 1 views
0

여러 개의 CSV 파일을 내 데이터 세트의 단일 큰 CSV로 병합하려고합니다. 내가 찾고있는 것은 여러 CVS 파일에서 소수의 열 데이터를 가져 와서 데이터 세트를 만드는 것입니다. 나는 최종 데이터 세트의 모든 컬럼을 원하지 않지만 선택된 데이터 세트는 거의 필요 없다. CSV를 읽는 동안 팬더에 names 속성을 사용했으나 정상적으로 돌아 오지만 반입 된 CSV를 새로 만들 수는 없습니다. 여기서 내가 뭘 잘못하고 있니? 하단에 스택 추적을 추가했습니다.팬더 to_csv() : TypeError : 유니 코드로 강제 변환 : 필요 문자열 또는 버퍼, 목록을 찾았습니다.

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() 

스택 트레이스 :

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 (path, "merge.csv"))'작동해야합니다 –

+0

고마워요. – Cyclotron3x3

답변

1

glob.glob이 목록을 반환합니다. big_frame.csv에 경로 이름의 문자열을 전달해야합니다. 너 왜 글로브가 필요한거야? big_frame.csv(os.path.join(path, "merge.csv"))가 작동해야합니다.

또한이 파일을 루프 하단에 frame.to_csv(fileToSave)으로 작성하고 있습니다. 모든 반복은 파일을 덮어 쓰는 것이므로 마지막 반복 만 파일을 저장합니다.

관련 문제