![](/img/trans.png)
[英]python: How to read multiple worksheets of the same workbook using pandas
[英]Using Pandas to pd.read_excel() for multiple worksheets of the same workbook
我有一個大型電子表格文件 (.xlsx),我正在使用 python pandas 進行處理。 碰巧我需要來自該大文件中兩個選項卡(工作表)的數據。 其中一個選項卡有大量數據,另一個只有幾個方形單元格。
當我在任何工作表上使用pd.read_excel()
時,在我看來就像加載了整個文件(不僅僅是我感興趣的工作表)。 因此,當我使用該方法兩次(每張紙一次)時,我實際上不得不忍受整個工作簿被讀取兩次(即使我們只使用指定的工作表)。
如何僅使用pd.read_excel()
加載特定工作表?
試試pd.ExcelFile
:
xls = pd.ExcelFile('path_to_file.xls')
df1 = pd.read_excel(xls, 'Sheet1')
df2 = pd.read_excel(xls, 'Sheet2')
正如@HaPsantran 所指出的,在ExcelFile()
調用期間讀入了整個 Excel 文件(似乎沒有辦法解決這個問題)。 這只是使您不必在每次要訪問新工作表時讀取同一個文件。
請注意, pd.read_excel()
的sheet_name
參數可以是工作表的名稱(如上)、指定工作表編號的整數(例如 0、1 等)、工作表名稱或索引列表或None
。 如果提供了一個列表,它會返回一個字典,其中鍵是工作表名稱/索引,值是數據框。 默認是簡單地返回第一張紙(即sheet_name=0
)。
如果指定None
,則返回所有工作表,作為{sheet_name:dataframe}
字典。
有幾個選項:
將所有工作表直接讀入有序字典中。
import pandas as pd
# for pandas version >= 0.21.0
sheet_to_df_map = pd.read_excel(file_name, sheet_name=None)
# for pandas version < 0.21.0
sheet_to_df_map = pd.read_excel(file_name, sheetname=None)
將第一張表直接讀入數據幀
df = pd.read_excel('excel_file_path.xls')
# this will read the first sheet into df
閱讀 excel 文件並獲取工作表列表。 然后選擇並加載紙張。
xls = pd.ExcelFile('excel_file_path.xls')
# Now you can list all sheets in the file
xls.sheet_names
# ['house', 'house_extra', ...]
# to read just one sheet to dataframe:
df = pd.read_excel(file_name, sheetname="house")
閱讀所有工作表並將其存儲在字典中。 與第一個相同,但更明確。
# to read all sheets to a map
sheet_to_df_map = {}
for sheet_name in xls.sheet_names:
sheet_to_df_map[sheet_name] = xls.parse(sheet_name)
# you can also use sheet_index [0,1,2..] instead of sheet name.
感謝@ihightower 指出閱讀所有工作表的方法,感謝@toto_tico 指出版本問題。
sheetname :字符串,整數,字符串/整數的混合列表,或無,默認 0 自 0.21.0 版起已棄用:使用 sheet_name 代替源鏈接
您還可以使用工作表的索引:
xls = pd.ExcelFile('path_to_file.xls')
sheet1 = xls.parse(0)
將給出第一個工作表。 對於第二個工作表:
sheet2 = xls.parse(1)
您還可以將工作表名稱指定為參數:
data_file = pd.read_excel('path_to_file.xls', sheet_name="sheet_name")
將僅上傳工作表"sheet_name"
。
選項1
如果不知道床單名稱
# Read all sheets in your File
df = pd.read_excel('FILENAME.xlsm', sheet_name=None)
# Prints all the sheets name in an ordered dictionary
print(df.keys())
然后,根據想要閱讀的工作表,可以將它們中的每一個傳遞給特定的dataframe
,例如
sheet1_df = pd.read_excel('FILENAME.xlsm', sheet_name=SHEET1NAME)
sheet2_df = pd.read_excel('FILENAME.xlsm', sheet_name=SHEET2NAME)
選項 2
如果名稱不相關並且所有關心的是工作表的位置。 假設一個人只想要第一張紙,
# Read all sheets in your File
df = pd.read_excel('FILENAME.xlsm', sheet_name=None)
sheet1 = list(df.keys())[0]
然后,根據工作表名稱,可以將每個工作表傳遞給特定的dataframe
,例如
sheet1_df = pd.read_excel('FILENAME.xlsm', sheet_name=SHEET1NAME)
pd.read_excel('filename.xlsx')
默認情況下閱讀工作簿的第一頁。
pd.read_excel('filename.xlsx', sheet_name = 'sheetname')
閱讀特定的工作簿表和
pd.read_excel('filename.xlsx', sheet_name = None)
將所有工作表從 excel 讀取到 Pandas 數據框作為 OrderedDict 的一種類型意味着嵌套數據框,所有工作表作為數據框內收集的數據框,它的類型是 OrderedDict。
如果您有興趣閱讀所有工作表並將它們合並在一起。 最好和最快的方法
sheet_to_df_map = pd.read_excel('path_to_file.xls', sheet_name=None)
mdf = pd.concat(sheet_to_df_map, axis=0, ignore_index=True)
這會將所有工作表轉換為單個數據框 m_df
df = pd.read_excel('FileName.xlsx', 'SheetName')
這將從文件FileName.xlsx
讀取工作表SheetName
您可以使用以下幾行閱讀所有工作表
import pandas as pd
file_instance = pd.ExcelFile('your_file.xlsx')
main_df = pd.concat([pd.read_excel('your_file.xlsx', sheet_name=name) for name in file_instance.sheet_names] , axis=0)
是的,不幸的是它總是會加載完整的文件。 如果您重復執行此操作,最好將工作表提取為單獨的 CSV,然后單獨加載。 您可以使用d6tstack自動執行該過程,它還添加了其他功能,例如檢查所有工作表或多個 Excel 文件中的所有列是否相等。
import d6tstack
c = d6tstack.convert_xls.XLStoCSVMultiSheet('multisheet.xlsx')
c.convert_all() # ['multisheet-Sheet1.csv','multisheet-Sheet2.csv']
如果您已將 excel 文件保存在與您的 python 程序(相對路徑)相同的文件夾中,那么您只需要提及工作表編號和文件名。
例子:
data = pd.read_excel("wt_vs_ht.xlsx", "Sheet2")
print(data)
x = data.Height
y = data.Weight
plt.plot(x,y,'x')
plt.show()
如果:
然后,您可以傳遞工作表名稱列表。 您可以手動填充:
import pandas as pd
path = "C:\\Path\\To\\Your\\Data\\"
file = "data.xlsx"
sheet_lst_wanted = ["01_SomeName","05_SomeName","12_SomeName"] # tab names from Excel
### import and compile data ###
# read all sheets from list into an ordered dictionary
dict_temp = pd.read_excel(path+file, sheet_name= sheet_lst_wanted)
# concatenate the ordered dict items into a dataframe
df = pd.concat(dict_temp, axis=0, ignore_index=True)
或者
如果您想要的工作表有一個通用的命名約定,也可以讓您與不需要的工作表區分開來,那么一些自動化是可能的:
# substitute following block for the sheet_lst_wanted line in above block
import xlrd
# string common to only worksheets you want
str_like = "SomeName"
### create list of sheet names in Excel file ###
xls = xlrd.open_workbook(path+file, on_demand=True)
sheet_lst = xls.sheet_names()
### create list of sheets meeting criteria ###
sheet_lst_wanted = []
for s in sheet_lst:
# note: following conditional statement based on my sheets ending with the string defined in sheet_like
if s[-len(str_like):] == str_like:
sheet_lst_wanted.append(s)
else:
pass
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.