如何连接来自同一个文件的多个Excel表单?

我有一个很大的excel文件,其中包含许多不同的工作表。 所有的床单都具有相同的结构,如:

Name col1 col2 col3 col4 1 1 2 4 4 3 2 1 
  • 我怎样才能连接(垂直)在Pandas所有这些表,而不必手动命名每个人? 如果这些文件,我可以使用glob来获取目录中的文件列表。 但在这里,对于Excel表格,我迷了路。
  • 有没有办法在结果数据框中创build一个variables来标识数据来源的表名?

谢谢!

尝试这个:

 dfs = pd.read_excel(filename, sheetname=None, skiprows=1) 

这将返回一个DF的字典,您可以使用pd.concat(dfs)轻松地进行连接,或者@jezrael已经在他的答案中发布了:

 df = pd.concat(pd.read_excel(filename, sheetname=None, skiprows=1)) 

sheetname :None – >所有工作表作为DataFrame的字典

更新:

有没有办法在结果数据框中创build一个variables来标识数据来源的表名?

 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 

首先为DataFrames dict添加参数sheetname=None ,省略第一行的skiprows=1 ,然后对MultiIndex DataFrame使用concat

最后一次使用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]: AB 0 1 3 1 2 4 0 5 6 1 7 8 

然后你可以运行df.reset_index()来重置索引。

编辑: pandas.ExcelFile.parse是,根据pandas文档:

等效于read_excel(ExcelFile,…)请参阅read_excel文档string以获取有关可接受参数的更多信息