как объединить несколько листов excel из одного файла?
У меня есть большой файл excel, который содержит много разных листов. Все листы имеют одинаковую структуру, например:
Name
col1 col2 col3 col4
1 1 2 4
4 3 2 1
- Как я могу объединить (вертикально) все эти листы в
Pandas, не называя каждый из них вручную? Если бы это были файлы, я мог бы использоватьglobдля получения списка файлов в каталоге. Но здесь, для листов excel, я потерялся. - Существует ли способ создать переменную в результирующем фрейме данных, которая идентифицирует имя листа, из которого поступают данные откуда?
Спасибо!
3 ответов:
Попробуйте вот что:
dfs = pd.read_excel(filename, sheetname=None, skiprows=1)Это вернет вам словарь DFs, который вы можете легко объединить с помощью
pd.concat(dfs)или как @jezrael уже опубликовал в своем ответе:df = pd.concat(pd.read_excel(filename, sheetname=None, skiprows=1))Sheetname : None - > все листы как словарь фреймов данных
Обновление:
Существует ли способ создать переменную в результирующем фрейме данных, которая определяет имя листа, из которого поступают данные?
dfs = pd.read_excel(filename, sheetname=None, skiprows=1)Предположим, что мы имеем следующее дикт:
In [76]: dfs Out[76]: {'d1': col1 col2 col3 col4 0 1 1 2 4 1 4 3 2 1, 'd2': col1 col2 col3 col4 0 3 3 4 6 1 6 5 4 3}Теперь мы можем добавить новый столбец:
In [77]: pd.concat([df.assign(name=n) for n,df in dfs.items()]) Out[77]: col1 col2 col3 col4 name 0 1 1 2 4 d1 1 4 3 2 1 d1 0 3 3 4 6 d2 1 6 5 4 3 d2
Сначала добавьте параметр
sheetname=NoneдляdictизDataFramesиskiprows=1для опустить первую строку, а затем используйтеconcatдляMultiIndex DataFrame.Последнее использование
reset_indexдля колонки с первого уровня:df = pd.concat(pd.read_excel('multiple_sheets.xlsx', sheetname=None, skiprows=1)) df = df.reset_index(level=1, drop=True).rename_axis('filenames').reset_index()
Принимая во внимание этот вопрос :
import pandas as pd file = pd.ExcelFile('file.xlsx') names = file.sheet_names # see all sheet names df = pd.concat([file.parse(name) for name in names])Результаты:
df Out[6]: A B 0 1 3 1 2 4 0 5 6 1 7 8Затем вы можете запустить
df.reset_index(), чтобы, ну, сбросить индекс.Править:
pandas.ExcelFile.parseэто, согласно документам панд:Эквивалентно read_excel(ExcelFile,...) Смотрите документ read_excel docstring для получения дополнительной информации о принятых параметрах
Comments