excelperfect
標簽:Python與Excel協(xié)同
本文將探討學(xué)習如何在Python中讀取和導(dǎo)入Excel文件,將數(shù)據(jù)寫入這些電子表格,并找到最好的軟件包來做這些事。
為數(shù)據(jù)科學(xué)使用Python和Excel
Excel是Microsoft在1987年開發(fā)的電子表格應(yīng)用程序,它得到了幾乎所有操作系統(tǒng)(如Windows、Macintosh、Android等)的正式支持。它預(yù)裝在Windows操作系統(tǒng)中,可以輕松地與其他操作系統(tǒng)平臺集成。在處理結(jié)構(gòu)化數(shù)據(jù)時,Microsoft Excel是最好且最易訪問的工具。
它以表格的方式組織、分析和存儲數(shù)據(jù),可以執(zhí)行計算,創(chuàng)建數(shù)據(jù)透視表、圖表,等等。自發(fā)布以來,該軟件廣受歡迎,并廣泛使用于世界各地的許多不同應(yīng)用領(lǐng)域和各種場合。
自互聯(lián)網(wǎng)誕生之日起,它就以指數(shù)級增長,數(shù)據(jù)量也以指數(shù)級增長。數(shù)據(jù)的增長促使人們了解如何分析數(shù)據(jù)。企業(yè)和政府正在收集大數(shù)據(jù)。因此,數(shù)據(jù)科學(xué)一詞應(yīng)運而生。
在處理數(shù)據(jù)時,需要在某個時候處理電子表格;然而,直接處理電子表格有時會讓人惱火,尤其當你是一名開發(fā)人員的時候。為了解決這個問題,Python開發(fā)人員想出了讀取、寫入、分析各種文件格式的方法,包括電子表格。
這里將主要介紹如何使用Python編程語言并在不直接使用Microsoft Excel應(yīng)用程序的情況下處理Excel。它將提供使用包的親身體驗,可以使用這些包在Python的幫助下加載、讀取、寫入和分析這些電子表格。你將處理pandas、openpyxl、xlrd、xlutils和pyexcel等軟件包。
數(shù)據(jù)就是石油
當啟動任何直接或間接處理數(shù)據(jù)的項目時,首先要做的就是搜索數(shù)據(jù)集?,F(xiàn)在可以通過各種方式收集數(shù)據(jù),可以使用網(wǎng)絡(luò)抓取、客戶端的私有數(shù)據(jù)集,也可以使用從GitHub、universities、kaggle、quandl等來源下載公共數(shù)據(jù)集。
數(shù)據(jù)可能位于Excel文件中,也可能使用.csv、.txt、.JSON等文件擴展名來保存。數(shù)據(jù)可以是定性的,也可以是定量的。根據(jù)計劃解決的問題類型,數(shù)據(jù)類型可能會有所不同。因此,作為第一步,應(yīng)該弄清楚使用的是定性數(shù)據(jù)還是定量數(shù)據(jù)。
數(shù)據(jù)可以是:
在開始用Python加載、讀取和分析Excel數(shù)據(jù)之前,最好查看示例數(shù)據(jù),并了解以下幾點是否與計劃使用的文件一致:- 電子表格的第一行通常是為標題保留的,標題描述了每列數(shù)據(jù)所代表的內(nèi)容,除非電子表格中的數(shù)據(jù)是圖像的像素。
- 避免在名稱或值字段標題中使用空格或由多個單詞組成的名稱之間有間隙或空格??紤]使用Python的標準PET-8格式,例如:下劃線、破折號、駝峰式大小寫,文本每一部分的第一個字母大寫,或者偏向使用短名字而不是長名字或句子。
- 盡量避免使用包含特殊字符的名稱,例如?、$、%、^,等等,因為特殊字符不會告訴任何有關(guān)數(shù)據(jù)的信息。
- 數(shù)據(jù)在某些列中可能缺少值。確保使用NA或完整列的平均值或中位數(shù)來填充它們。
在使用Microsoft Excel時,會發(fā)現(xiàn)大量保存文件的選項。除了默認的擴展名.xls或.xlsx,可以轉(zhuǎn)到“文件”選項卡,單擊“另存為”,然后選擇“保存類型”文件擴展名選項中列出的擴展名之一。為數(shù)據(jù)科學(xué)保存數(shù)據(jù)集最常用的擴展名是.csv和.txt(作為制表符分隔的文本文件),甚至是.xml。根據(jù)選擇的保存選項,數(shù)據(jù)集的字段由制表符或逗號分隔,這將構(gòu)成數(shù)據(jù)集的“字段分隔符”。了解文件的擴展名很重要,因為加載Excel中存儲的數(shù)據(jù)時,Python庫需要明確知道它是逗號分隔的文件還是制表符分隔的文件。準備工作區(qū)是其中很好的一步,但這不是一個強制性步驟,可以跳過。然而,把這作為第一步,會讓事情變得更簡單,并確保有一個良好的開端。在終端中工作時,可以首先導(dǎo)航到文件所在的目錄,然后啟動Python。這也意味著必須確保文件位于想要工作的目錄中。但是有些人是初學(xué)者,已經(jīng)開始了Python會話,而對正在使用的目錄一無所知,可以考慮執(zhí)行以下命令:另一種方法是跟蹤數(shù)據(jù)集文件的存放位置。還可以在代碼中給出該文件夾的絕對路徑,而不是更改計劃編寫Python代碼的目錄。絕對路徑將確保無論在哪里編寫Python代碼,它都能夠獲取數(shù)據(jù)。你將看到,這些命令非常重要,不僅用于加載數(shù)據(jù),還用于進一步分析。現(xiàn)在,已經(jīng)完成了所有檢查,保存了數(shù)據(jù),并準備好了工作區(qū)。在最終開始用Python讀取數(shù)據(jù)之前,還有一件事要做:安裝讀取和寫入Excel文件所需的軟件包。確保系統(tǒng)上安裝了pip和setuptools。不要使用Python2,因為它已經(jīng)停止使用,確保已經(jīng)安裝了Python3.4以上版本,不過也不需要擔心,因為這些通常已經(jīng)準備好了。如果已經(jīng)有了Python3,只需確保已經(jīng)升級到了最新版本。檢查pip或pip3命令是否以符號方式鏈接到Python3,使用計劃在本文中使用的當前版本的Python(>=3.4)。此外,通過在終端中鍵入Python來檢查它顯示的版本是>=2.7還是>=3.4,如果是2.7,則通過鍵入Python3來檢查,如果這有效,則意味著系統(tǒng)上安裝了兩個不同的Python版本。pip install –Upip setuptools or pip3 install –U pip3 setuptoolspython –m pipinstall –U pip setuptools or python3 –m pip install –U pip setuptools如果尚未安裝pip,運行python get-pip.py。如果需要更多幫助以使一切正常運行,也可以按照頁面上的安裝說明進行操作。Anaconda Python發(fā)行版可能是你應(yīng)該尋找的,因為它與開始數(shù)據(jù)科學(xué)之旅所需的幾乎所有東西捆綁在一起。從Python、Pip、Pandas、Numpy、Matplotlib等開始,所有東西都將安裝在它里面。這將為你提供一種簡單快捷的方法來開始進行數(shù)據(jù)科學(xué),因為不需要擔心單獨安裝數(shù)據(jù)科學(xué)所需的軟件包。然而,仍然有很多包可能不在Anaconda的涵蓋范圍內(nèi),可以通過Pip手動安裝這些包,或者從源代碼構(gòu)建這些包。Anaconda不僅對初學(xué)者有用,而且對經(jīng)驗豐富的開發(fā)人員也很有用。這是一種快速測試概念驗證的方法,無需單獨安裝每個軟件包,從而節(jié)省大量時間。Anaconda包括100個最流行的Python、R和Scala數(shù)據(jù)科學(xué)軟件包,以及幾個開源開發(fā)環(huán)境,如JupyterLab/Notebook和Spyder IDE。要了解如何安裝Anaconda,可以查看官方文檔。按照說明進行安裝,就可以開始了。恭喜你,你的環(huán)境已經(jīng)設(shè)置好了!準備好開始加載文件并分析它們了。將Excel文件作為Pandas數(shù)據(jù)框架加載Pandas包是導(dǎo)入數(shù)據(jù)集并以表格行-列格式呈現(xiàn)數(shù)據(jù)集的最佳方法之一。Pandas庫建立在數(shù)字Python(通常稱為NumPy)之上,為Python編程語言提供易于使用的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)分析工具。Pandas有內(nèi)置的函數(shù),可以用來分析和繪制數(shù)據(jù),并使它的展現(xiàn)其意義。由于該庫提供的強大功能和靈活性,它已成為每一位數(shù)據(jù)科學(xué)家的首選。當然,這個庫也有一些缺點,尤其是在處理大型數(shù)據(jù)集時,它在加載、讀取和分析具有數(shù)百萬條記錄的大型數(shù)據(jù)集時可能會變慢。如果已經(jīng)通過Anaconda獲得了Pandas,那么可以使用pd.Excelfile()函數(shù)將Excel文件加載到數(shù)據(jù)框架(DataFrames)中,如下圖所示。只需創(chuàng)建一個虛擬example.xlsx文件,并在行和列中填寫一些任意值,然后將其以.xlsx格式保存。如果沒有安裝Anaconda,可能會出現(xiàn)nomodule錯誤。只需在終端執(zhí)行pip install pandas或者在jupyter notebook單元格中執(zhí)行!pip install pandas在你的環(huán)境中安裝Pandas軟件包,然后執(zhí)行上面代碼塊中包含的命令。要讀取.csv文件,有一個類似的函數(shù)來在數(shù)據(jù)框架中裝載數(shù)據(jù):read_csv()。下面是一個如何使用此函數(shù)的示例:pd.read_csv()函數(shù)有一個sep參數(shù),充當此函數(shù)將考慮的分隔符逗號或制表符,默認情況下設(shè)置為逗號,但如果需要,可以指定另一個分隔符。如何將數(shù)據(jù)框架寫入Excel文件由于使用.csv或.xlsx文件格式在Pandas中裝載和讀取文件,類似地,可以將Pandas數(shù)據(jù)框架保存為使用.xlsx的Excel文件,或保存為.csv文件。假設(shè)在數(shù)據(jù)分析和機器學(xué)習預(yù)測之后,希望將更新的數(shù)據(jù)或結(jié)果寫回到一個新文件,可以使用pandas的to_excel()函數(shù)實現(xiàn)。但是,在使用此函數(shù)之前,如果要將數(shù)據(jù)寫入.xlsx文件中的多個工作表,確保已安裝XlsxWriter,如下所示:- 首先,使用ExcelWriter對象來輸出數(shù)據(jù)框架,定義將在其中保存數(shù)據(jù)框架輸出的writer。
- pd.ExcelWriter函數(shù)接受兩個參數(shù),文件名和是xlsxwriter的引擎。
- 接下來,將writer變量傳遞給to_excel()函數(shù),并指定工作表名稱。通過這種方式,可以將包含數(shù)據(jù)的工作表添加到現(xiàn)有工作簿中,該工作簿中可能有許多工作表:可以使用ExcelWriter將多個不同的數(shù)據(jù)框架保存到一個包含多個工作表的工作簿中。
一個更好、更簡單的選項是將數(shù)據(jù)寫入.csv擴展。正如在上面所看到的,可以使用read_csv讀取.csv文件,還可以使用pandas的to_csv()方法將數(shù)據(jù)框架結(jié)果寫回到逗號分隔的文件,如下所示:如果要以制表符分隔的方式保存輸出,只需將\t傳遞給參數(shù)sep。注意,還可以使用其他各種函數(shù)和方法來寫入文件,甚至可以將header和index參數(shù)傳遞給to_csv函數(shù)。安裝這些軟件包的一般建議是在Python或Anaconda virtualenv中安裝,而不使用系統(tǒng)軟件包。在虛擬環(huán)境中安裝軟件包的好處是,它不會升級或降級基本系統(tǒng)軟件包,并且可以為不同的項目使用不同的conda環(huán)境。要開始使用virtualenv,首先需要安裝它。安裝虛擬環(huán)境非常簡單,尤其是使用Anaconda。在你的基礎(chǔ)上,anaconda只需使用一個名稱和希望它使用的python版本創(chuàng)建虛擬環(huán)境。只要激活它,安裝需要的任何軟件包,然后轉(zhuǎn)到你的項目文件夾。提示:完成后別忘了關(guān)閉該環(huán)境。擁有虛擬環(huán)境使事情變得非常簡單。想象一下,作為一名開發(fā)人員,將在多個不同的項目上工作,每個項目可能需要具有不同版本的不同軟件包。當你的項目有沖突的需求時,虛擬環(huán)境就會派上用場。否則,你會一直在安裝一個軟件包,然后為一個項目升級,為另一個項目降級。更好的辦法是為每個項目提供不同的環(huán)境。現(xiàn)在,終于可以開始安裝和導(dǎo)入讀取要加載到電子表格數(shù)據(jù)中的包了。如果想讀寫.xlsx、.xlsm、.xltx和xltm文件格式,建議使用Openpyxl軟件包。可以使用pip安裝openpyxl,但要安裝在excel conda環(huán)境中,如下面的代碼單元所示。現(xiàn)在已經(jīng)安裝了openpyxl,可以開始加載數(shù)據(jù)了。但在加載數(shù)據(jù)之前,需要創(chuàng)建它。要創(chuàng)建數(shù)據(jù),可以按照下面的工作簿進行操作,其中有三張工作表將加載到Python中:load_workbook()函數(shù)接受文件名作為參數(shù),并返回一個workbook對象wb,它代表文件??梢酝ㄟ^運行type(wb)檢查wb的類型。上面的代碼塊返回在Python中加載的工作簿的工作表名稱。接下來,還可以使用此信息檢索工作簿的單個工作表。還可以使用wb.active檢查當前處于活動狀態(tài)的工作表。從下面的代碼中可以看到,還可以從工作簿中加載另一張工作表:雖然一開始會認為這些Worksheet對象沒有用處,但你可以用它們做很多事情。就像可以使用方括號[]從工作簿工作表中的特定單元格中檢索值一樣,在這些方括號中,可以傳遞想要從中檢索值的確切單元格。這種從單元格中提取值的方法在本質(zhì)上與通過索引位置從NumPy數(shù)組和Pandas數(shù)據(jù)框架中選擇和提取值非常相似。但是使用Openpyxl時,除了指定要從中提取值的索引外,還需要指定屬性.value,如下所示:如你所見,除了value屬性外,還有其他屬性可用于檢查單元格,如row、column和coordinate。從sheet1中選擇B3元素時,從上面的代碼單元輸出:這是關(guān)于單元格的信息,如果要檢索單元格值呢?可以使用sheet.cell()函數(shù)檢索單元格值,只需傳遞row和column參數(shù)并添加屬性.value,如下所示:要連續(xù)提取值,而不是手動選擇行和列索引,可以在range()函數(shù)的幫助下使用for循環(huán)。這將在提取單元格值方面提供很大的靈活性,而無需太多硬編碼。讓我們打印出第2列中包含值的行的值。如果那些特定的單元格是空的,那么只是獲取None。openpyxl有一個utility類,它有兩個方法get_column_letter和column_index_from_string。顧名思義,前者返回給定數(shù)字/整數(shù)的字母,后者返回字母作為字符串提供的數(shù)字。已經(jīng)為在特定列中具有值的行檢索了值,但是如果要打印文件的行而不只是關(guān)注一列,需要做什么?例如,只關(guān)心在A1和C3之間的區(qū)域,其中第一個指定想關(guān)心的區(qū)域的左上角,第二個指定想關(guān)注的區(qū)域的右下角。這個區(qū)域就是在下面第一行代碼中看到的所謂的cellObj。然后,對于位于該區(qū)域的每個單元格,打印該單元格中包含的坐標和值。每行結(jié)束后,將打印一條消息,表明cellObj區(qū)域的行已打印。注意,區(qū)域的選擇與選擇、獲取和索引列表以及NumPy數(shù)組元素非常相似,其中還使用方括號和冒號:來指示要獲取值的區(qū)域。此外,上面的循環(huán)還很好地使用了單元格屬性。要使上述解釋和代碼可視化,可能需要查看循環(huán)完成后返回的結(jié)果:最后,有一些屬性可以用來檢查導(dǎo)入的結(jié)果,即max_row和max_column。當然,這些屬性是確保正確加載數(shù)據(jù)的一般方法,但盡管如此,它們可以而且將非常有用。至此,還看到了如何在Python中使用openpyxl讀取數(shù)據(jù)并檢索數(shù)據(jù)。很多人可能會覺得這是一種非常困難的處理這些文件的方法,當還沒有研究如何操作數(shù)據(jù)時,這肯定會更加復(fù)雜。可以使用Pandas包中的DataFrame()函數(shù)將工作表的值放入數(shù)據(jù)框架(DataFrame),然后使用所有數(shù)據(jù)框架函數(shù)分析和處理數(shù)據(jù):如果要指定標題和索引,可以傳遞帶有標題和索引列表為True的標題參數(shù),然而,由于已轉(zhuǎn)換為數(shù)據(jù)框架的工作表已經(jīng)具有標題,因此不需要添加標題:甚至可以在dataframe_to_rows方法的幫助下,將值追加或?qū)懭?/span>Excel文件,如下圖所示??梢詫⑸厦鎰?chuàng)建的數(shù)據(jù)框df連同索引和標題一起傳遞給Excel:openpyxl軟件包提供了將數(shù)據(jù)寫回Excel文件的高度靈活性,允許改變單元格樣式等等,這使它成為在使用電子表格時需要知道的軟件包之一。注意:要了解更多關(guān)于openpyxl的信息,比如如何更改單元格樣式,或者該軟件包如何與NumPy和Pandas配合使用,查看以下內(nèi)容。如果想從具有.xls或.xlsx擴展名的文件中讀取和操作數(shù)據(jù),該軟件包非常理想。xlrd提供了一些函數(shù),可以使用這些函數(shù)僅檢索或篩選特定的工作表,而不是整個工作簿。它提供了sheet_by_name()或sheet_by_index()等函數(shù),用于檢索要在分析中使用的工作表,并篩選其余的工作表。使用xlwt將數(shù)據(jù)寫入Excel文件與其他Excel Python軟件包一樣,可以使用xlwt創(chuàng)建包含數(shù)據(jù)的電子表格,甚至可以手動創(chuàng)建。除了XlsxWriter軟件包之外,還可以使用xlwt軟件包。xlwt非常適合將數(shù)據(jù)和格式信息寫入具有舊擴展名的文件,如.xls。乍一看,很難發(fā)現(xiàn)它比你之前學(xué)習的Excel軟件包有多好,但更多的是因為與其他軟件包相比,在使用這個軟件包時感覺有多舒服。通過一個示例來理解它,在這個示例中,將使用Python代碼手動創(chuàng)建工作簿并向其寫入數(shù)據(jù):自動化Excel文件中的數(shù)據(jù)寫入過程至關(guān)重要,尤其是當想將數(shù)據(jù)寫入文件,但又不想花時間手動將數(shù)據(jù)輸入文件時。在這種情況下,可以使用非常簡單的技術(shù)(如for循環(huán))自動化。1.首先使用xlwt.workbook()初始化工作簿;2.然后向工作簿中添加一個名為Sheet1的工作表;3.接著定義數(shù)據(jù),即標題(cols)和行(txt);4.接下來,有一個for循環(huán),它將迭代數(shù)據(jù)并將所有值填充到文件中:對于從0到4的每個元素,都要逐行填充值;指定一個row元素,該元素在每次循環(huán)增量時都會轉(zhuǎn)到下一行; 另一個for循環(huán),每行遍歷工作表中的所有列;為該行中的每一列填寫一個值。5.用值填充每行的所有列后,將轉(zhuǎn)到下一行,直到剩下零行。pyexcel是一個Python包裝器,它提供了一個用于在.csv、.ods、.xls、.xlsx和.xlsm文件中讀取、操作和寫入數(shù)據(jù)的API接口。使用pyexcel,Excel文件中的數(shù)據(jù)可以用最少的代碼轉(zhuǎn)換為數(shù)組或字典格式。下面是一個示例,說明如何使用pyexcel包中的函數(shù)get_array()將Excel數(shù)據(jù)轉(zhuǎn)換為數(shù)組格式:讓我們了解一下如何將Excel數(shù)據(jù)轉(zhuǎn)換為有序的列表字典。要實現(xiàn)這一點,可以使用get_dict()函數(shù),它也包含在pyexcel包中:也可以得到二維數(shù)組的字典。簡單地說,可以在get_book_dict()函數(shù)的幫助下提取單個字典中的所有工作簿。記住,上面的兩個輸出my_dict和book_dict可以使用pd.DataFrame()轉(zhuǎn)換為數(shù)據(jù)框架,這將更容易處理數(shù)據(jù)。就像使用這個軟件包可以輕松地將數(shù)據(jù)加載到數(shù)組中一樣,也可以輕松地將數(shù)組導(dǎo)出回電子表格??梢允褂?/span>save_as()函數(shù)來獲得這個值,并將數(shù)組和目標文件名傳遞給dest_file_name參數(shù),如下所示:注意,如果要指定分隔符,可以添加dest_delimiter參數(shù),并在兩者之間傳遞要用作分隔符的符號,如\t、,、””。然而,如果有字典,則需要使用save_book_as()函數(shù),將二維字典傳遞給bookdict,并指定文件名:注意,上述代碼中不會保留字典中數(shù)據(jù)的順序。Python有大量的包,可以用一組不同的庫實現(xiàn)類似的任務(wù)。因此,如果仍在尋找允許加載、讀取和寫入數(shù)據(jù)的包。除了Excel包和Pandas,讀取和寫入.csv文件可以考慮使用CSV包,如下代碼所示:當數(shù)據(jù)可用時,通常建議檢查數(shù)據(jù)是否已正確加載。如果已將數(shù)據(jù)放入數(shù)據(jù)框架中,則可以通過運行head()和tail()函數(shù)輕松快速地檢查數(shù)據(jù)是否已按預(yù)期加載。head()將輸出數(shù)據(jù)框架的前幾行,tail()將輸出數(shù)據(jù)框架的最后幾行。還可以檢查數(shù)據(jù)框架data的形狀、尺寸和數(shù)據(jù)類型:但導(dǎo)入數(shù)據(jù)只是數(shù)據(jù)科學(xué)工作流程的開始。一旦你的環(huán)境中有了電子表格中的數(shù)據(jù),就可以專注于重要的事情:分析數(shù)據(jù)。然而,如果想繼續(xù)研究這個主題,考慮PyXll,它允許在Python中編寫函數(shù)并在Excel中調(diào)用它們。注:本文整理自datacamp.com,供有興趣的朋友參考。有興趣的朋友可以到知識星球完美Excel社群下載《Python與Excel協(xié)同應(yīng)用初學(xué)者指南》中文電子版。歡迎在下面留言,完善本文內(nèi)容,讓更多的人學(xué)到更完美的知識。歡迎到知識星球:完美Excel社群,進行技術(shù)交流和提問,獲取更多電子資料,并通過社群加入專門的微信討論群,更方便交流。每日精進:2022.2.21 21:30-22:10 研學(xué)《普林斯頓微積分讀本(修訂版)》9.5 取對數(shù)求導(dǎo)法;9.6 指數(shù)增長和指數(shù)衰變;9.7 雙曲函數(shù)
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報。