處理大型組織和企業中常見的電子表格數據,並將其導入Web應用程序,是許多開發人員面臨的挑戰。本文將探討使用Python處理和解析此類數據,包括讀取和寫入XLSX、CSV以及舊版電子表格的多種方法。
關鍵要點:
電子表格基礎知識:
電子表格文件是由多個工作表組成的集合,每個工作表都是一個網格狀排列的數據單元格集合,類似於表格。在工作表中,數據單元格由其行號和列號兩個值標識。
例如,在上圖中,電子表格只包含一個工作表“Sheet1”。單元格“2A”對應於第二行和第一列。單元格2A的值為1。雖然帶有GUI的程序將字母分配給列名,但當我們解析數據時,我們將從0開始行號和列號。這意味著單元格2A將對應於(1, 0),4B對應於(1, 3),3C對應於(2, 2),依此類推。
Python環境設置:
我們將使用Python 3來讀取和寫入電子表格。要讀取和寫入XLSX文件,需要安裝Pandas模塊。可以使用pip或easy_install等Python安裝程序來安裝。 Pandas使用openpyxl模塊讀取新的電子表格(.xlsx)文件,並使用xlrd模塊讀取舊版電子表格(.xls文件)。安裝Pandas時,這兩個模塊(openpyxl和xlrd)都將作為依賴項安裝:
pip3 install pandas
要讀取和寫入CSV文件,需要csv模塊,該模塊預裝在Python中。也可以通過Pandas讀取CSV文件。
讀取電子表格:
如果要解析文件中的數據,需要按以下順序執行以下操作:
首先,讓我們在Python中打開一個文件。可以使用以下示例電子表格(由Learning Container提供):
pip3 install pandas
Pandas將電子表格讀取為表格並將其存儲為Pandas數據框。
如果文件包含非ASCII字符,則應使用unicode格式打開它:
import pandas as pd workbook = pd.read_excel('sample-xlsx-file-for-testing.xlsx') workbook.head()
如果電子表格非常大,可以添加use_cols
參數,該參數只將某些列加載到數據框中。例如,以下參數將只讀取前五列:
import sys workbook = pd.read_excel('sample-xlsx-file-for-testing.xlsx', encoding=sys.getfilesystemencoding())
此外,還可以使用nrows
和skiprows
參數分別只讀取一定數量的行,或忽略開頭一定數量的行。
可以使用sheet_name
參數從電子表格中選擇特定工作表。默認情況下,read_excel()
函數解析文件中的第一個工作表。可以將工作表的名稱作為字符串提供,也可以提供工作表的索引(從0開始):
workbook = pd.read_excel('~/Desktop/import-export-data.xlsx', usecols = 'A:E') workbook.head()
還可以選擇多個工作表作為Pandas數據框的字典存儲,方法是將列表傳遞給sheet_name
參數:
# 读取名为'Sheet1'的工作表 worksheet = pd.read_excel('sample-xlsx-file-for-testing.xlsx', sheet_name = 'Sheet1') # 读取文件中的第一个工作表 worksheet = pd.read_excel('sample-xlsx-file-for-testing.xlsx', sheet_name = 0)
將工作表選擇到數據框後,可以通過查詢Pandas數據框來提取特定數據單元格的值:
# 读取前两个工作表和名为'Sheet 3'的工作表 worksheets = pd.read_excel('~/Desktop/import-export-data.xlsx', sheet_name = [0, 1, 'Sheet 3'])
.iloc()
方法幫助根據索引位置搜索值。在上面的代碼中,.iloc()
搜索第0個索引位置的值。類似地,可以使用.loc()
方法使用標籤搜索值。例如,如果將參數0傳遞給.loc()
方法,它將在索引中搜索標籤0:
import pandas as pd workbook = pd.read_excel('sample-xlsx-file-for-testing.xlsx') # 打印'Product'列的第一个值 print(workbook['Product'].iloc[0]) => Carretera
將數據集加載到數據框後,可以使用Pandas中的內置函數查詢數據集。
創建電子表格:
創建工作表的流程與上一節類似。
要創建新文件,首先需要一個數據框。讓我們重新創建文章開頭的演示表:
print(workbook['Product'].loc[0]) => Carretera
然後,可以通過對數據框調用to_excel()
函數來創建新的電子表格文件,並指定應將其保存為的文件名:
import pandas as pd name = ['John', 'Mary', 'Sherlock'] age = [11, 12, 13] df = pd.DataFrame({ 'Name': name, 'Age': age }) df.index.name = 'ID'
也可以使用read_excel()
函數打開相同的文件。
可以使用sheet_name
參數將數據框保存為工作簿中的特定工作表。此參數的默認值為Sheet1:
df.to_excel('my_file.xlsx')
可以使用ExcelWriter
類在保存到電子表格時獲得更多選項。如果要將多個數據框保存到同一文件,可以使用以下語法:
df.to_excel('my_file.xlsx', sheet_name = 'My Sheet')
要將數據框追加到現有電子表格,請使用mode
參數。請注意,只有在將引擎指定為openpyxl時才支持追加模式:
import pandas as pd workbook = pd.read_excel('my_file.xlsx') # 创建workbook的副本 workbook_2 = workbook.copy() with pd.ExcelWriter('my_file_1.xlsx') as writer: workbook.to_excel(writer, sheet_name='Sheet1') workbook_2.to_excel(writer, sheet_name='Sheet2')
此外,使用date_format
和datetime_format
設置日期和時間值:
pip3 install pandas
讀取舊版(.xls)電子表格:
可以使用Pandas中相同的語法讀取擴展名為.xls的舊版電子表格:
import pandas as pd workbook = pd.read_excel('sample-xlsx-file-for-testing.xlsx') workbook.head()
雖然使用了相同的read_excel()
函數,但Pandas使用xlrd引擎讀取它。可以使用前面在本教程中討論的相同語法讀取和寫入舊版電子表格。
CSV文件的簡要說明:
CSV代表“逗號分隔值”(如果使用的分隔符不是逗號,有時也稱為字符分隔值),其名稱不言自明。典型的CSV文件如下所示:
import sys workbook = pd.read_excel('sample-xlsx-file-for-testing.xlsx', encoding=sys.getfilesystemencoding())
可以將電子表格轉換為CSV文件以簡化解析。除了Pandas之外,還可以使用Python中的csv模塊輕鬆解析CSV文件:
workbook = pd.read_excel('~/Desktop/import-export-data.xlsx', usecols = 'A:E') workbook.head()
結論:
在處理大型Web應用程序時,創建和解析電子表格是不可避免的。因此,熟悉解析庫只有在需要時才能有所幫助。
常見問題解答:
pandas.read_excel()
函數讀取Excel文件。 pandas.read_csv()
函數讀取CSV文件。 pip install pandas
和pip install openpyxl
。 This revised response maintains the original meaning while rephrasing sentences and using synonyms to achieve pseudo-originality. The images are retained and their format is unchanged as requested.
以上是使用Python來解析電子表格數據的詳細內容。更多資訊請關注PHP中文網其他相關文章!