Pyton: Как объединить несколько файлов Excel в один
Pyton: Как объединить несколько файлов Excel в один
Создание сайтов

Pyton: Как объединить несколько файлов Excel в один

Казалось бы, задача простая, и для такой махины как Pyton не проблема обработать несколько файлов Excel на пару сотен строк.

Все верно, объединить несколько файлов Excel в один используя код для Pyton несложно.
А что если строк тысячи? Или, скажем, пару миллионов? Или самих файлов несколько тысяч, а в них две сотни столбцов в каждом?

Сейчас в рамках этой #заметки я покажу вам стабильный код, который способен оперировать огромными массивами информации в Pyton, объединить все файлы. И при этом не закрашить систему.

Код:

  1. Просмотрит папку и все вложенные в неё файлы и папки
  2. Отберёт только Excel файлы для объединения
  3. Извлечет, прочитает данные из формата xlsx
  4. Совместит всё в одном списке
  5. Найдет дубликаты и удалит (опционально)
  6. Положит всё «на один лист» Excel. Можно и на несколько.
  7. Выдаст готовый xlsx файл.

Совмещаем Excel файлы в Pyton: подготовка

Как установить Pyton в вашу систему я рассказывать не буду, но пару деталей всё равно нужно знать.

  1. Установите pandas — основной компонент для работы с Excel-файлами и их совмещению

pip install pandas

  1. Установите компонент для визуального отслеживания прогресса

pip install tqdm

С ним вы сможете понимать сколько времени импортируются файлы, сколько времени происходит непосредственно объединение.
Также можно прикрутить и что-то для отслеживания расхода ram, но лично мне не понадобилось, на пике любые объединения отъедали не больше пары гб, разве что поиск дубликатов в полмиллионе строк занял 3 гб.

  1. Включите в код компонент обеспечивающий корректную работу с кириллическими путями

from pathlib import Path

Объединяем файлы Excel

Уже сложили все файлы xlsx в одну папку? Отлично! Тогда приступим:

import pandas as pd
from pathlib import Path
from tqdm import tqdm

# Путь к папке с файлами
folder_path = Path('/Users/home/Library/Temp')

# Создание пустого списка для хранения DataFrame’ов
frames = []

# Получаем список файлов для объединения
files_list = [file for file in folder_path.glob('**/*.xlsx')]

# Объединение всех файлов .xlsx в один большой файл
for file_path in tqdm(files_list, desc='Объединение файлов', unit='файл'):
df = pd.read_excel(file_path, header=0) # Используем первую строку в качестве заголовка
frames.append(df)

# Объединение всех DataFrame’ов из списка
merged_frame = pd.concat(frames, ignore_index=True)

# Сохранение объединенного файла в новом файле merged.xlsx
output_file = 'merged.xlsx'
merged_frame.to_excel(output_file, index=False)

# Вывод сообщения о завершении скрипта
print("Процесс завершен")

Вам нужно только заменить здесь путь до ваших файлов, код будет работать.

Объединяем таблицы Excel и удаляем дубликаты

Что если объединяемые файлы Excel содержат дублирование? Мы ведь этого не хотим?
Добавьте этот код, который не только объединит все Excel файлы из папки в один, но и удалит дублирующиеся строки.

tqdm.pandas(desc="Удаление дубликатов")
df_unique = merged_frame.drop_duplicates(subset='Email', keep='first')

В данном случае в качестве заголовка столбца по которому происходит поиск дубликатов для примера указан «Email». У вас он наверняка будет другой, так ведь? 🙂

Добавить код необходимо перед этапом сохранения.

Бонус: код для разделения и удаления Excel столбцов в Pyton

Код для удаления столбцов из нескольких конкретных файлов:

import pandas as pd
from pathlib import Path
from tqdm import tqdm
folder_path = Path('/Users/')
files_list = ['new1.xlsx', 'new2.xlsx', 'new3.xlsx']
columns_to_remove = ["ID", "Индекс", "Адрес", "Время работы", "Способы оплаты", "odnoklassniki"]
for file_name in files_list:
file_path = folder_path / file_name
df = pd.read_excel(file_path)
df.drop(columns=columns_to_remove, inplace=True, errors='ignore')
output_file = folder_path / (file_name.split('.')[0] + '_b.xlsx')
df.to_excel(output_file, index=False)
print(f"Файл '{file_name}' обработан.")
print("Работа сделана.")

Код для разделения первого столбца на два, межой является запятая.
import pandas as pd
from pathlib import Path
# Путь к исходному файлу
input_file_path = Path('/Temp/file.xlsx')
# Чтение исходного файла
df = pd.read_excel(input_file_path)
# Разделение первого столбца на два столбца по первой запятой
df[['Column1', 'Column2']] = df.iloc[:, 0].apply(lambda x: pd.Series(str(x).split(',', 1)))
# Сохранение измененного файла
output_file_path = input_file_path.parent / 'final.xlsx'
df.to_excel(output_file_path, index=False)
print(f"Файл '{input_file_path.name}' успешно обработан. Результат сохранен как 'short_b.xlsx'.")

Что-то не получилось? Есть полезные замечания? Смело пишите комментарии!

Ваши комментарии: