python 如何将多个 xls 文件合并到一个数据框中?
How do I merge multiple xls files into one dataframe in python?
我有 excel 个文件,每个文件有 3 张和所有相同的列 headers。
我想合并所有数据,以便得到一个组合数据框。此数据框应在最终数据框旁边列出工作表名称、行号和 xls 文件名。
我试过了
import pandas as pd
dfe = pd.concat(pd.read_excel('abc1.xls', sheet_name=None), ignore_index=True)
这合并了其中一个文件的所有工作表,但没有在数据旁边写下行号或工作表名称。我怎样才能做同样的事情?
期望的输出-
Rownumber Sheetname Filename State Region Brand
1 tig abc1.xls CA S Go
2 con abc2.xls IA A Po
这是操作方法。我用了两个函数。第一个函数读取单个 Excel 文件中的所有 sheet,并添加 sheet 名称。第二个函数获取所有 excel 文件,并使用第一个函数读取所有文件中的所有 sheet。
from pandas import pd
def read_sheets(filename):
result = []
sheets = pd.read_excel(filename, sheet_name=None)
for name, sheet in sheets.items():
sheet['Sheetname'] = name
sheet['Row'] = sheet.index
result.append(sheet)
return pd.concat(result, ignore_index=True)
def read_files(filenames):
result = []
for filename in filenames:
file = read_sheets(filename)
file['Filename'] = filename
result.append(file)
return pd.concat(result, ignore_index=True)
您可以通过提供要读取的文件列表来调用它:
files = ['multisheet.xls', 'multisheet2.xls']
read_files(files)
对于我试过的例子,它产生了一个像这样的数据框:
A B A+B Sheetname Row Filename
0 1 10 11 Sheet1 0 multisheet.xls
1 2 11 13 Sheet1 1 multisheet.xls
2 3 12 15 Sheet1 2 multisheet.xls
3 4 13 17 Sheet1 3 multisheet.xls
4 3 10 13 Sheet2 0 multisheet.xls
5 3 11 14 Sheet2 1 multisheet.xls
6 3 12 15 Sheet2 2 multisheet.xls
7 3 13 16 Sheet2 3 multisheet.xls
8 1 10 11 Sheet1 0 multisheet2.xls
9 2 11 13 Sheet1 1 multisheet2.xls
10 3 12 15 Sheet1 2 multisheet2.xls
11 4 13 17 Sheet1 3 multisheet2.xls
12 4 10 13 Sheet2 0 multisheet2.xls
13 3 11 14 Sheet2 1 multisheet2.xls
14 3 12 15 Sheet2 2 multisheet2.xls
15 3 13 16 Sheet2 3 multisheet2.xls
我有 excel 个文件,每个文件有 3 张和所有相同的列 headers。
我想合并所有数据,以便得到一个组合数据框。此数据框应在最终数据框旁边列出工作表名称、行号和 xls 文件名。
我试过了
import pandas as pd
dfe = pd.concat(pd.read_excel('abc1.xls', sheet_name=None), ignore_index=True)
这合并了其中一个文件的所有工作表,但没有在数据旁边写下行号或工作表名称。我怎样才能做同样的事情?
期望的输出-
Rownumber Sheetname Filename State Region Brand
1 tig abc1.xls CA S Go
2 con abc2.xls IA A Po
这是操作方法。我用了两个函数。第一个函数读取单个 Excel 文件中的所有 sheet,并添加 sheet 名称。第二个函数获取所有 excel 文件,并使用第一个函数读取所有文件中的所有 sheet。
from pandas import pd
def read_sheets(filename):
result = []
sheets = pd.read_excel(filename, sheet_name=None)
for name, sheet in sheets.items():
sheet['Sheetname'] = name
sheet['Row'] = sheet.index
result.append(sheet)
return pd.concat(result, ignore_index=True)
def read_files(filenames):
result = []
for filename in filenames:
file = read_sheets(filename)
file['Filename'] = filename
result.append(file)
return pd.concat(result, ignore_index=True)
您可以通过提供要读取的文件列表来调用它:
files = ['multisheet.xls', 'multisheet2.xls']
read_files(files)
对于我试过的例子,它产生了一个像这样的数据框:
A B A+B Sheetname Row Filename
0 1 10 11 Sheet1 0 multisheet.xls
1 2 11 13 Sheet1 1 multisheet.xls
2 3 12 15 Sheet1 2 multisheet.xls
3 4 13 17 Sheet1 3 multisheet.xls
4 3 10 13 Sheet2 0 multisheet.xls
5 3 11 14 Sheet2 1 multisheet.xls
6 3 12 15 Sheet2 2 multisheet.xls
7 3 13 16 Sheet2 3 multisheet.xls
8 1 10 11 Sheet1 0 multisheet2.xls
9 2 11 13 Sheet1 1 multisheet2.xls
10 3 12 15 Sheet1 2 multisheet2.xls
11 4 13 17 Sheet1 3 multisheet2.xls
12 4 10 13 Sheet2 0 multisheet2.xls
13 3 11 14 Sheet2 1 multisheet2.xls
14 3 12 15 Sheet2 2 multisheet2.xls
15 3 13 16 Sheet2 3 multisheet2.xls