如何从同一个文件连接多个Excel工作表?

时间:2017-10-06 12:36:54

标签: python excel pandas dataframe

我有一个包含许多不同表格的大型Excel文件。所有工作表都具有相同的结构,如:

Name
col1  col2  col3  col4
1     1     2     4
4     3     2     1
  • 如何在Pandas中连接(垂直)所有这些工作表而无需手动命名每个工作表?如果这些是文件,我可以使用glob来获取目录中的文件列表。但是在这里,对于excel表,我迷路了。
  • 有没有办法在结果数据框中创建一个变量来标识数据所来自的工作表名称?

谢谢!

4 个答案:

答案 0 :(得分:4)

试试这个:

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))

表名:无 - >所有工作表都是DataFrames的字典

<强>更新

  

有没有办法在结果数据框中创建一个变量   标识数据来源的工作表名称?

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

答案 1 :(得分:3)

首先为sheetname=None dictDataFrames添加参数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()

答案 2 :(得分:2)

this question发出便笺:

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是根据pandas docs:

  

等效于read_excel(ExcelFile,...)有关已接受参数的详细信息,请参阅read_excel docstring

答案 3 :(得分:0)

CREATE TABLE PERSON
(
ID varchar(20),
FIRST_NAME varchar(20),
LAST_NAME varchar(20),
PHONE_NUMBER varchar(20),
BIRTH_DATE DATE,
FATHER_ID varchar(20),
MOTHER_ID varchar(20),
PRIMARY KEY (ID),
FOREIGN KEY (FATHER_ID) REFERENCES PERSON(ID),
FOREIGN KEY (MOTHER_ID) REFERENCES PERSON(ID)
);