Python之Pandas使用系列(八):讀寫Excel文件的各種技巧

Python之Pandas使用系列(八):讀寫Excel文件的各種技巧

介紹:

我們將學習如何使用Python操作Excel文件。我們將概述如何使用Pandas加載xlsx文件以及將電子表格寫入Excel。

如何將Excel文件讀取到Pandas DataFrame:

和前面的章節一樣,在使用Pandas時,我們必須從導入模塊開始:

import pandas as pd

使用read_excel的最簡單方法是將文件名作為字符串傳遞。如果我們不傳遞任何其他參數(例如工作表名稱),它將讀取索引中的第一張sheet。在第一個示例中,我們將不使用任何參數:

Python之Pandas使用系列(八):讀寫Excel文件的各種技巧

在這裡,Pandas的read_excel方法將數據從Excel文件讀取到Pandas DataFrame對象中。然後,我們將此 DataFrame存儲到名為df的變量中。

默認情況下,當使用read_excel時,Pandas將為 DataFrame分配一個數字索引或行標籤,並且當int出現在Python中時,Pandas通常會從零開始。

例如,如果您的數據沒有包含唯一值的列,則可以用作更好的索引。如果有一列可以用作更好的索引,我們可以覆蓋默認行為。

可以通過將index_col參數來創建一個索引。

Python之Pandas使用系列(八):讀寫Excel文件的各種技巧

使用read_excel讀取特定列

使用Pandas read_excel時,我們將自動從Excel文件中獲取所有列。如果由於某種原因我們不想解析Excel文件中的所有列,則可以使用參數 usecols。假設我們只想創建一個具有ID, Address, Name列的 DataFrame 。我們可以如下文成:

Python之Pandas使用系列(八):讀寫Excel文件的各種技巧

根據read_excel文檔,我們應該可以放入一個字符串。例如,cols =‘Address:Name‘應該給我們與上面相同的結果。

讀取Excel文件時如何跳過行

現在,我們將學習在使用Pandas加載Excel文件時如何跳過行。讀取的excel示例如下:

Python之Pandas使用系列(八):讀寫Excel文件的各種技巧

在下面的Pandas read_excel示例中,我們加載工作表" examples",其中包含我們需要跳過的行。

我們將使用參數sheet_name =' examples'讀取名為' examples''的工作表。請注意,如果我們不使用sheet_name參數,則會讀取第一張sheet。在此示例中,重要的部分是參數 skiprow = 2。我們使用它跳過前兩行:

Python之Pandas使用系列(八):讀寫Excel文件的各種技巧

我們可以使用header 參數獲得與上述相同的結果 。將使用參數 header = 1告訴Pandas read_excel我們的標題在第二行。


Python之Pandas使用系列(八):讀寫Excel文件的各種技巧

將多個Excel工作表讀取到Pandas DataFrame

在Pandas read_excel中,我們將學習如何閱讀多個sheets。我們的Excel文件example_sheets1.xlsx'具有兩張表:" Sheet1"和" Sheet2"。我們將讀入" Sheet1"和" Sheet2"這兩個sheet:

Python之Pandas使用系列(八):讀寫Excel文件的各種技巧

或者可以將參數sheet_name設置為 None。

合併Dataframe

使用Pandas read_excel時,可能希望合併所有工作表中的數據。合併DataFrame非常容易。我們只使用concat函數並遍歷工作表:

Python之Pandas使用系列(八):讀寫Excel文件的各種技巧

讀取許多Excel文件

在某些情況下,我們可能有很多Excel文件包含來自不同實驗的數據。在Python中,我們可以使用模塊os和fnmatch來讀取目錄中的所有文件。最後,我們使用列表推導對找到的所有文件使用read_excel:

import os, fnmatch
xlsx_files = fnmatch.filter(os.listdir('.'), '*concat*.xlsx')
dfs = [pd.read_excel(xlsx_file) for xlsx_file in xlsx_files]

如果沒有問題,我們可以再次使用concat函數合併 DataFrame:

df = pd.concat(dfs, sort=False)

還有其他方法可以讀取許多Excel文件並將其合併。例如,我們可以將模塊glob與Pandas concat一起使用以讀取多個xlss文件:

import glob
list_of_xlsx = glob.glob('./*concat*.xlsx')
df = pd.concat(list_of_xlsx)

設置數據或列的數據類型

如果願意,我們還可以設置列的數據類型。讓我們使用Pandas再次讀取examples.xlsx。在read_excel例子下面我們使用ID型參數來設置的某些列的數據類型。

Python之Pandas使用系列(八):讀寫Excel文件的各種技巧

將DataFrame寫入Excel

當然,可以使用Pandas模塊在Python中創建Excel文件。我們將首先創建一個帶有一些變量的 DataFrame,但首先,我們將導入Pandas模塊:

import pandas as pd

下一步是創建 DataFrame。我們將使用字典創建 DataFrame。鍵將是列名,值將是包含我們的數據的列表:

df = pd. DataFrame({'Names':['Andreas', 'George', 'Steve',
'Sarah', 'Joanna', 'Hanna'],
'Age':[21, 22, 20, 19, 18, 23]})

然後,我們使用" to_excel "方法將 DataFrame寫入Excel文件。在下面的Pandas to_excel示例中,我們不使用任何參數。

df.to_excel(output.xlsx')

如果不使用參數 sheet_name,則將 獲得默認的工作表名稱" Sheet1"。我們還可以看到我們在Excel文件中獲得了一個包含數字的新列。這些是 DataFrame的索引。

Python之Pandas使用系列(八):讀寫Excel文件的各種技巧

如果我們希望將工作表命名為其他名稱,並且不希望索引列,則可以執行以下操作:

df.to_excel(output.xlsx', sheet_name='examples, index=False)

將多個熊貓 DataFrame寫入Excel文件:

如果碰巧有很多 DataFrame要存儲在一個Excel文件中,但要存儲在不同的工作表中,則可以輕鬆地做到這一點。但是,我們現在需要使用ExcelWriter:

df1 = pd. DataFrame({'Names': ['Andreas', 'George', 'Steve',
'Sarah', 'Joanna', 'Hanna'],
'Age':[21, 22, 20, 19, 18, 23]})
df2 = pd. DataFrame({'Names': ['Pete', 'Jordan', 'Gustaf',
'Sophie', 'Sally', 'Simone'],
'Age':[22, 21, 19, 19, 29, 21]})
df3 = pd. DataFrame({'Names': ['Ulrich', 'Donald', 'Jon',
'Jessica', 'Elisabeth', 'Diana'],
'Age':[21, 21, 20, 19, 19, 22]})
dfs = {'Group1':df1, 'Group2':df2, 'Group3':df3}
writer = pd.ExcelWriter('NamesAndAges.xlsx', engine='xlsxwriter')for sheet_name in dfs.keys():
dfs[sheet_name].to_excel(writer, sheet_name=sheet_name, index=False)

writer.save()

在上面的代碼中,我們創建了3個 DataFrame,然後將它們放入Dict中。注意,key是sheet名稱,單元格名稱是 DataFrame。完成此操作後,我們使用xlsxwriter創建writer對象。然後,我們繼續遍歷鍵(即工作表名稱)並添加每個工作表。最後,文件被保存。

總結:

當然,還有其他存儲數據的方法。其中之一是使用JSON文件。後面我們會繼續介紹如何使用Pandas讀取和寫入JSON文件。

點擊關注,如果發現任何不正確的地方,或者想分享有關上述主題的更多信息,歡迎反饋。


分享到:


相關文章: