Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Panda to_csv(): TypeError: приведение к Unicode: нужна строка или буфер, список найден

Автор вопроса: Cyclotron3x3Ответов: 1

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

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

pythonpandastypeerrorunicodebuffer

Ответы

Ответ 1 · рейтинг 1 · Ted Petrou

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы