Чтение нескольких файлов Excel в датафреймы с использованием цикла for, считывая месяц из каждого имени файла.

Вопрос или проблема

У меня есть 12 файлов Excel. Каждый из них основан на месяце года, и поэтому каждое имя файла заканчивается на ‘Месяц YYYY’. Например, файл для марта 2021 года заканчивается на ‘March 2021.xlsx’. Я хочу прочитать каждый файл Excel, выбрать определенные столбцы, удалить пустые строки, а затем объединить каждый файл в один файл Excel в качестве именованного листа. Однако я хочу найти имя файла, определить месяц и затем переименовать второй столбец, чтобы указать этот месяц.

Как мне добавить код, чтобы месяц каждого файла использовался как ‘новое имя’ для второго столбца каждого df?

Вот пример с использованием двух месяцев:

Файл один: January 2021.xlsx

A B
1 x
3 x

Файл три: February 2021.xlsx

A B
3 x
5 x

Я хочу переименовать B, чтобы он представлял месяц соответствующего файла Excel, а затем объединить, чтобы получить:

A Январь Февраль
1 x 0
3 x x
5 0 x

Это то, что я сделал до сих пор.

#Сохранить файлы Excel в списке python
excel_files = list(Path(DATA_DIR).glob('*.xlsx'))
#Прочитать каждый файл в dataframe

dfs = []

for excel_file in excel_files:
    df = pd.read_excel(excel_file,sheet_name="Sheet1",header=5,usecols="A,F",skipfooter=8)
    df.dropna(how='any', axis=0, inplace = True)
    month_name = excel_file.stem.split()[0]  # Получить название месяца из имени файла
    df.rename(columns={'old-name': month_name}, inplace=True)  # Переименовать столбец
    dfs.append(df)
#Собрать список данных для объединения
data_frames = [dfs[0], dfs[1],dfs[2] ... dfs[11]]
#Объединить все dataframes
df_merged = reduce(lambda  left,right: pd.merge(left,right,on=['A'],
                                            how='outer'), data_frames).fillna(0)

Мне нужна помощь в добавлении кода, чтобы месяц каждого файла использовался как ‘новое имя’ для второго столбца каждого df?

Ответ или решение

Для решения задачи чтения нескольких Excel файлов, обработки данных и объединения их в один DataFrame с переименованием столбцов в зависимости от месяца в имени файла, можно использовать библиотеку pandas в Python. Давайте разберёмся, как это можно сделать шаг за шагом.

Шаг 1: Импорт необходимых библиотек

Для начала убедитесь, что у вас установлены необходимые библиотеки. Вам понадобятся pandas и pathlib для работы с файлами.

import pandas as pd
from pathlib import Path
from functools import reduce

Шаг 2: Определение каталога с данными

Создайте переменную для хранения пути к каталогу, где находятся ваши Excel файлы. Замените DATA_DIR на фактический путь.

DATA_DIR = 'ваш/путь/к/каталогу'

Шаг 3: Сбор файлов

Соберите все Excel файлы в список:

excel_files = list(Path(DATA_DIR).glob('*.xlsx'))

Шаг 4: Чтение файлов и обработка данных

Вам нужно будет написать цикл, который будет проходить по каждому файлу, читать его в DataFrame, очищать от пустых строк и переименовывать нужный столбец в соответствии с месяцем, который вы извлечёте из имени файла.

dfs = []

for excel_file in excel_files:
    # Чтение файла в DataFrame начиная с определённой строки и выбирая нужные столбцы
    df = pd.read_excel(excel_file, sheet_name="Sheet1", header=5, usecols="A,F", skipfooter=8)

    # Удаление пустых строк
    df.dropna(how='any', axis=0, inplace=True)

    # Извлечение месяца из имени файла
    month = excel_file.stem.split()[-2]  # Извлекает месяц (например, "January")

    # Переименование второго столбца в соответствующий месяц
    df.rename(columns={df.columns[1]: month}, inplace=True)

    # Добавление DataFrame в список
    dfs.append(df)

Шаг 5: Объединение DataFrame в один

После того как все DataFrame собраны в список, можно их объединить.

# Объединение всех DataFrame по столбцу 'A'
df_merged = reduce(lambda left, right: pd.merge(left, right, on=['A'], how='outer'), dfs).fillna(0)

Шаг 6: Сохранение объединённого DataFrame в Excel

Вы можете сохранить полученный DataFrame в Excel файл. Например, вы можете сохранить результаты в файл с одним листом.

df_merged.to_excel('merged_data.xlsx', index=False)

Заключение

Теперь у вас есть полный код, который решает поставленную задачу — чтение множества Excel файлов в DataFrames, переименование столбцов в соответствии с месяцем из имени файла и объединение всех DataFrames в один. Этот подход обеспечивает возможность модульного изменения, что упрощает дальнейшую работу с данными.

Если у вас остались вопросы или нужна дополнительная информация, не стесняйтесь их задать!

Оцените материал
Добавить комментарий

Капча загружается...