簡體   English   中英

如何連接同一個文件中的多個excel表?

[英]how to concatenate multiple excel sheets from the same file?

我有一個包含許多不同工作表的大 excel 文件。 所有工作表都具有相同的結構,例如:

Name
col1  col2  col3  col4
1     1     2     4
4     3     2     1
  • 如何在Pandas串聯(垂直)所有這些工作表而不必手動命名它們? 如果這些是文件,我可以使用glob來獲取目錄中的文件列表。 但是在這里,對於excel表,我迷路了。
  • 有沒有辦法在結果數據框中創建一個變量來標識數據來自的工作表名稱?

謝謝!

試試這個:

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

這將返回一個 DF 字典,您可以使用pd.concat(dfs)或@jezrael 已經在他的回答中發布的內容輕松連接它:

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

sheet_name : None -> 所有工作表作為 DataFrames 的字典

更新:

有沒有辦法在結果數據框中創建一個變量來標識數據來自的工作表名稱?

dfs = pd.read_excel(filename, sheet_name=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

這個問題中記下

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是,根據熊貓文檔:

等效於 read_excel(ExcelFile, ...) 有關可接受參數的更多信息,請參閱 read_excel 文檔字符串

首先為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()
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"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM