簡體   English   中英

使用 Pandas to pd.read_excel() 為同一工作簿的多個工作表

[英]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']

請參閱d6tstack Excel 示例

如果您已將 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()

如果:

  • 您想要多個但不是全部的工作表,並且
  • 你想要一個 df 作為輸出

然后,您可以傳遞工作表名稱列表。 您可以手動填充:

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.

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