我有一个包含许多不同表格的大型Excel文件。所有工作表都具有相同的结构,如:
Name
col1 col2 col3 col4
1 1 2 4
4 3 2 1
Pandas
中连接(垂直)所有这些工作表而无需手动命名每个工作表?如果这些是文件,我可以使用glob
来获取目录中的文件列表。但是在这里,对于excel表,我迷路了。谢谢!
答案 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
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()
答案 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)
);