如何连接来自同一个文件的多个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以获取有关可接受参数的更多信息