Файлы к уроку: Файлы доступны только спонсорам канала. Оформите спонсорскую подписку всего за 49 — 149 рублей, если хотите получить максимум от обучения. Стать спонсором канала: https://www.youtube.com/channel/UCwAru3vDmH-IdYtwK7JWN4w/join
Наша задача — объединить много Excel XLSX файлов в один файл CSV. Это довольно частая задача, которая решается Excel-специалистами в Python. Зачем это нужно:
- Чтобы работать с одним файлом, а не целой кучей. Если мы объединяем файлы в PQ, то отчет работает очень медленно. Гораздо лучше в Excel сразу импортировать объединенный файл;
- Чтобы отказать от XLSX формата. Если мы работаем с внешними файлами в формате XLSX, то мы обречены на очень низкую производительность. Файлы в формате CSV обрабатываются в десятки раз быстрее, чем в формате XLSX.
Как склеить несколько XLSX файлов в один при помощи Python? Мы сделаем это всего в несколько шагов.
Импортируем нужные модули
Первым делом импортируем модули, которые понадобится для обработки:
- pandas — чтобы импортировать и подготовить данные
- glob — чтобы подключиться к нужно папке и найти в ней нужные файлы
Код будет такой:
import glob
import pandas as pd
Получаем список файлов в папке
Мы хотим получить только список XLSX файлов из нужной нам папки. Лишние файлы нам не нужны. Для этого нужна функция glob. Сгенерируем список XLSX файлов из нужной нам папки.
files = [item for item in glob.glob(r'c:\Users\Timur\Downloads\PQ\Pandas. Объединить xlsx файлы\*{}'.format('.xlsx'))]
Создадим цикл обработки и объединения файлов
Мы создадим цикл, который обработает каждый файл и запишет результат в созданный для этого датафрейм.
При импорте мы удалим лишние строки сверху и выберем только нужные столбцы.
После этого мы переупорядочим столбцы и переименуем их.
combined = pd.DataFrame()
for file in files:
file = pd.read_excel(file,
skiprows=9,
usecols=['Дата\nконтракта','Код точки\nпродаж','Пользователь','MSISDN','ICC'])
file = file[['Дата\nконтракта','Код точки\nпродаж','Пользователь','MSISDN','ICC']]
file.columns=['date','posid','user','msisdn','icc']
combined = pd.concat([combined, file])
Запишем результат в файл CSV
Осталось всего лишь результат из переменной combined записать в файл CSV.
combined.to_csv(r'c:\Users\Timur\Downloads\PQ\Pandas. Объединить xlsx файлы\combined.csv')