Python 如何连接同一文件中的多个excel工作表?
我有一个很大的excel文件,其中包含许多不同的工作表。所有板材具有相同的结构,如:Python 如何连接同一文件中的多个excel工作表?,python,excel,pandas,dataframe,Python,Excel,Pandas,Dataframe,我有一个很大的excel文件,其中包含许多不同的工作表。所有板材具有相同的结构,如: Name col1 col2 col3 col4 1 1 2 4 4 3 2 1 如何(垂直)连接Pandas中的所有这些图纸,而不必手动命名它们?如果这些是文件,我可以使用glob获取目录中的文件列表。但是在这里,对于excel表格,我迷路了 有没有办法在生成的数据框中创建一个变量来标识数据来自的工作表名称 谢谢 试试这个: dfs = pd.rea
Name
col1 col2 col3 col4
1 1 2 4
4 3 2 1
- 如何(垂直)连接
中的所有这些图纸,而不必手动命名它们?如果这些是文件,我可以使用Pandas
获取目录中的文件列表。但是在这里,对于excel表格,我迷路了glob
- 有没有办法在生成的数据框中创建一个变量来标识数据来自的工作表名称
dfs = pd.read_excel(filename, sheet_name=None, skiprows=1)
这将返回一个DFs字典,您可以使用pd.concat(DFs)
或@jezrael已经在其答案中发布的内容轻松连接该字典:
df = pd.concat(pd.read_excel(filename, sheet_name=None, skiprows=1))
工作表\u名称:无->所有工作表作为数据帧字典
更新:
有没有办法在生成的数据帧中创建一个变量
标识数据来源的图纸名称
假设我们有以下命令:
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
注意到:
结果:
df
Out[6]:
A B
0 1 3
1 2 4
0 5 6
1 7 8
然后可以运行df.reset_index()
,来重置索引
编辑:是指,根据文件:
与read_excel(excel文件,…)等效。有关可接受参数的更多信息,请参阅read_excel文档字符串
首先为
DataFrames
的dict
添加参数sheetname=None
,并为省略第一行添加skiprows=1
,然后用于多索引数据框
第一级列的最后一次使用:
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()
file\u save\u location='myfolder'
文件名='filename'
位置=''myfolder1'
os.chdir(位置)
文件\u xls=glob.glob(“*.xls*”)
excel_name=[f代表文件中的f_xls]
sheets=pd.ExcelFile(files\u xls[0])。sheet\u名称
def合并excel到dfs(excel名称、工作表名称):
工作表框架=[pd.read\u excel(x,工作表名称=工作表名称)用于excel名称中的x]
组合索引=pd.concat(图纸框架)。重置索引(drop=True)
返回组合函数
i=0
而我(床单):
过程=表[i]
合并文件=合并excel到dfs(excel名称、流程)
整合的文件到csv(文件保存位置+文件名+'.csv')
i=i+1
其他:
“我们完成了合并部分”
然后pd.concat(dfs.values())
生成结果。很好,但是如何摆脱Name
超级列?我想我可以在字典的某个地方使用一些read_excel(skip=1)?@blacksite,是的,谢谢。我以为OP已经知道了…;-)@ℕʘʘḆḽḘ, 使用skiprows=1
@ℕʘʘḆḽḘ, 我已经更新了我的答案-这就是你想要的吗?谢谢,但是为什么要使用文件.parse
而不是一些read.excel?
请参见上文。太好了。谢谢大家,但我必须把这个给跑得最快的人谢谢你,耶斯雷尔。同样的问题,我怎样才能去掉这里每张工作表的第一行呢?skiprows=1
应该会有帮助。太好了。谢谢大家,但我必须把这个给跑得最快的人如果你能在文章后面加上一些描述和代码,那就更好了。
df
Out[6]:
A B
0 1 3
1 2 4
0 5 6
1 7 8
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()
file_save_location='myfolder'
file_name='filename'
location = ''myfolder1'
os.chdir(location)
files_xls = glob.glob("*.xls*")
excel_names=[f for f in files_xls]
sheets = pd.ExcelFile(files_xls[0]).sheet_names
def combine_excel_to_dfs(excel_names, sheet_name):
sheet_frames = [pd.read_excel(x, sheet_name=sheet_name) for x in excel_names]
combined_df = pd.concat(sheet_frames).reset_index(drop=True)
return combined_df
i = 0
while i < len(sheets):
process = sheets[i]
consolidated_file= combine_excel_to_dfs(excel_names, process)
consolidated_file.to_csv(file_save_location+file_name+'.csv')
i = i+1
else:
"we done on consolidation part"