Как объединить несколько CSV файлов в один?
Есть несколько CSV файлов, которые я хочу объединить в один. Изначально воспользовался ответом, который предлагает следующее:
import fileinput import glob file_list = glob.glob("*.csv") with open('result.csv', 'w') as file: input_lines = fileinput.input(file_list) file.writelines(input_lines)
Проблема оказалась в том, что при объединении не добавляется перенос строки после очередного файла (т.е. первая строка второго файла оказывается совмещена с последней строкой первого файла). Кроме того, каждый CSV файл имеет заголовок (одинаковый для всех), который хорошо бы убрать у всех фалов, кроме первого. Сейчас объединяю вручную:
with open(target_filename, 'w') as target_file: file_counter = 0 for file_ in files: line_counter = 0 for line in open(file_, 'r'): if line_counter == 0 and file_counter > 0: target_file.write('\r\n') else: target_file.write(line) line_counter += 1 file_counter += 1
Каким образом сделать объединение эффективнее?
Зачем это нужно?
Копипаст вручную — это, может, и не самый плохой вариант для небольшого количества файлов.
Но представьте, что вам нужно объединить 100+ файлов… готовы ли вы сделать все вручную? Эта затея весьма утомительна и чревата ошибками.
Для файлов с одинаковой структурой таблицы (те же заголовки и количество столбцов) можно воспользоваться скриптом на Python.
Шаг 1: Импортируйте пакеты и задайте рабочую директорию
Измените “/mydir” на нужную вам директорию.
import os
import glob
import pandas as pd
os.chdir("/mydir")
Шаг 2: Воспользуйтесь glob для сопоставления с шаблоном ‘csv’
Сопоставьте шаблон (‘csv’) и сохраните список имен файлов в переменной ‘all_filenames’. Здесь можно почитать о сопоставлении регулярных выражений.
extension = 'csv'
all_filenames = [i for i in glob.glob('*.<>'.format(extension))]
Шаг 3: Объедините файлы в список и экспортируйте в CSV
Воспользуйтесь pandas для объединения файлов в список и экспорта в CSV. На выходе получится файл “combined_csv.csv”. Найти его можно в рабочей директории.
Для экспорта «неанглийских» языков добавляется encoding = ‘utf-8-sig’.
#combine all files in the list
combined_csv = pd.concat([pd.read_csv(f) for f in all_filenames ])
#export to csv
combined_csv.to_csv( "combined_csv.csv", index=False, encoding='utf-8-sig')
Как объединить несколько CSV-файлов в один DataFrame с помощью pandas
Одной из распространенных задач в обработке данных является чтение данных из нескольких файлов и их объединение в один DataFrame для дальнейшего анализа.

Алексей Кодов
Автор статьи
7 июля 2023 в 18:01
Одной из распространенных задач в обработке данных является чтение данных из нескольких файлов и их объединение в один DataFrame для дальнейшего анализа. В этой статье будет рассмотрен пример объединения нескольких CSV-файлов в один DataFrame с помощью библиотеки pandas.
Сначала импортируем необходимые библиотеки — pandas и glob. Последняя используется для работы с путями к файлам.
import glob import pandas as pd
Для чтения всех CSV-файлов из определенного каталога можно использовать функцию glob, которая возвращает список всех файлов, соответствующих заданному шаблону.
path = 'путь/к/каталогу' filenames = glob.glob(path + "/*.csv")
Создаем пустой список dfs, в который будут добавляться DataFrame’ы, полученные в результате чтения каждого из CSV-файлов.
Далее с помощью цикла for проходим по всем именам файлов из списка filenames, читаем содержимое каждого файла с помощью функции pd.read_csv и добавляем полученный DataFrame в список dfs.
for filename in filenames: dfs.append(pd.read_csv(filename))
После того, как все данные прочитаны и DataFrame’ы добавлены в список, можно объединить их в один DataFrame с помощью функции pd.concat. Аргумент ignore_index=True говорит о том, что индексы исходных DataFrame’ов должны быть проигнорированы, и для нового DataFrame’а должны быть созданы новые индексы.
big_frame = pd.concat(dfs, ignore_index=True)
Таким образом, в результате выполнения данного кода все CSV-файлы из указанного каталога будут прочитаны и объединены в один DataFrame big_frame, который затем может быть использован для дальнейшего анализа данных.
Python Практический. Объединить множество CSV
Создадим список всех файлов для объединения. Все они в данном примере находятся в той же папке, что и книга.
files = glob.glob('*.csv')
Прочитаем все файлы из списка, создадим датафрейм, в который запишем все данные.
# Объединяем combined = pd.DataFrame() for file in files: data = pd.read_csv(file) data['filename'] = file combined = pd.concat([combined, data])
Примененные функции
- glob.glob
- pandas.DataFrame
- pandas.read_csv
- pandas.concat
- pandas.DataFrame.to_csv
Курс Python Практический
| Номер урока | Урок | Описание |
|---|---|---|
| 1 | Python Практический. Скачиваем котировки | В этом уроке мы научимся скачивать котировки с помощью модуля pandas_datareader. |
| 2 | Python Практический. Объединить книги Excel | В этом уроке мы объединим много Excel файлов в один CSV файл с помощью Python |
| 3 | Python Практический. Объединить книги Excel | Дополним урок по объединению большого количества XLSX файлов в один CSV при помощи Python. Добавим Progress Bar и вывод времени начала обработки каждого файла. |
| 4 | Python Практический. Создать Progress Bar | В этом уроке мы научимся создавать Progress Bar в Python. Для этого воспользуемся модулем tqdm. |
| 5 | Python Практический. Объединить листы книги Excel | Объединим множество листов одной книги Excel по вертикали. |
| 6 | Python Практический. Объединить книги Excel и листы в них | Как объединить книги Excel и все листы в них в одну таблицу. |
| 7 | Python Практический. Объединить множество CSV | Объединим множество CSV файлов по вертикали в один CSV файл. |
| 8 | Python Практический. Таблицы из множества интернет-страниц | Извлечем таблицу из множества веб-страниц и объединим по вертикали. |
| 9 | Python Практический. Многостраничное извлечение таблиц с Requests и BS4 | В этом уроке мы с помощью Python модулей Requests и BS4 извлечем таблицу из множества web-страниц, потом все эти таблицы объединим по вертикали в одну и запишем результат в Excel файл. |
| 10 | Python Практический. Скрапинг/Парсинг сайтов с Selenium и BS4 | В этом уроке мы будем скрапить/парсить веб сайт с Python модулями Selenium и BF4. |
| 11 | Python Практический. Автоматизация браузера Python Selenium, Скрапинг, скачивание выписок ЕГРЮЛ | В этом уроке мы познакомимся с модулем Selenium для Python. Он позволяет автоматизировать работу браузера, например, открывать веб-страницы, заполнять формы, получать содержимое блоков и скачивать файлы. Мы изучим основы Selenium на примере получения данных ЕГРЮЛ по ИНН и автоматическому скачиванию выписок ЕГРЮЛ. |
| 12 | Python Практический. Множественная замена текста с Pandas | В этом уроке мы выполним множественную замена текста с помощью модуля Pandas |