Как объединить несколько Excel файлов в один?
Нужно объединить несколько прайс-листов в виде Excel файлов в один. Все .xlsx файлы с прайс-листами одинаковы по структуре: в первой строке шапка, дальше данные, количество столбцов одинаковое. Наименования товаров в итоговом файле должны идти в алфавитном порядке. Рядом с каждым наименованием товара должно быть название таблицы, из которой он взят.
Весь код что имеется на данный момент лишь объединяет все фалы в один:
import os
import panda as pd
cwd = os.path.abspath('C:\\Project')
files = os.listdir(cwd)
all_data = pd.DataFrame()
for file in files:
if file.endswith('.xlsx'):
df = pd.read_excel(file)
all_data = all_data.append(df, ignore_index=True)
all_data.head()
status = pd.read_excel('test.xlsx')
all_data_st = pd.merge(all_data, status, how='left')
all_data_st.head()
all_data_st.to_excel('res.xlsx')
Как разобраться с остальным, идей нет вообще, поэтому прошу помощи.
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
Как-то так:
from pathlib import Path
data_dir = Path(r"C:\Project")
df = (pd.concat([pd.read_excel(f).assign(file_name=f.stem)
for f in data_dir.glob("*.xlsx")],
ignore_index=True)
.sort_values("<здесь указать наименования столбца с наименованием товаров>"))
Некоторые пояснения:
data_dir.glob("*.xlsx")- итератор по все Excel файлам в директорииC:\Project.assign(file_name=f.stem)- добавит к каждому прочитанному фрейму столбецfile_nameс наименованием файла (без расширения)pd.concat(...)- объединит (вертикально) все фреймы в один большой.sort_values(<article_name_column_name>)- отсортирует результат по столбцу<здесь указать наименования столбца с наименованием товаров>