Лучший способ объединить несколько CSV-файлов в один DataFrame
прочитать их по отдельности один за другим, поместить все отдельные фрагменты в список, а затем объединить их с помощью функции pandas.concat()
:
Например:
>>> import pandas as pd >>> import numpy as np # создадим файлы с данными for i in range(3): data = pd.DataFrame(np.random.randn(10, 4)) data.to_csv("file_{}.csv".format(i)) >>> files = ["file_0.csv", "file_1.csv", "file_2.csv"] >>> result = pd.concat([pd.read_csv(f) for f in files], ignore_index=True) >>> result Unnamed: 0 0 1 2 3 0 0 -0.714345 -0.047677 -0.048285 -1.466391 1 1 -0.125408 0.060338 0.446607 0.645225 2 2 -2.349701 0.863265 -1.514651 0.028173 3 3 -1.373359 -1.526978 -0.285922 0.280287 4 4 -0.717175 1.139409 1.194357 -1.026374 ... 25 5 -0.887048 -1.288377 1.364751 1.265977 26 6 0.236390 -1.047761 0.689784 1.406902 27 7 0.050077 0.114487 0.115938 -0.036789 28 8 -0.692353 -1.019187 -0.769891 0.271227 29 9 -0.153415 0.065217 0.756331 0.287017
Можно использовать подход чтения всех файлов, соответствующих шаблону. Пример использования модуля glob
:
>>> import glob >>> import os >>> files = glob.glob("file_*.csv") >>> result = pd.concat([pd.read_csv(f) for f in files], ignore_index=True) >>> result Unnamed: 0 0 1 2 3 0 0 -0.714345 -0.047677 -0.048285 -1.466391 1 1 -0.125408 0.060338 0.446607 0.645225 2 2 -2.349701 0.863265 -1.514651 0.028173 3 3 -1.373359 -1.526978 -0.285922 0.280287 4 4 -0.717175 1.139409 1.194357 -1.026374 ... 25 5 -0.887048 -1.288377 1.364751 1.265977 26 6 0.236390 -1.047761 0.689784 1.406902 27 7 0.050077 0.114487 0.115938 -0.036789 28 8 -0.692353 -1.019187 -0.769891 0.271227 29 9 -0.153415 0.065217 0.756331 0.287017
Кстати, эта стратегия будет работать с другими функциями
pandas.read_*(...)