[英]How to obtain the mean of selected columns from multiple sheets within same Excel File
[英]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.