手把手教你用Pandas读取所有主流数据存储
導(dǎo)讀:從常見的Excel和CSV到JSON及各種數(shù)據(jù)庫,Pandas幾乎支持市面上所有的主流數(shù)據(jù)存儲形式。
作者:李慶輝
來源:大數(shù)據(jù)DT(ID:hzdashuju)
Pandas提供了一組頂層的I/O API,如pandas.read_csv()等方法,這些方法可以將眾多格式的數(shù)據(jù)讀取到DataFrame數(shù)據(jù)結(jié)構(gòu)中,經(jīng)過分析處理后,再通過類似DataFrame.to_csv()的方法導(dǎo)出數(shù)據(jù)。
表3-1列出了一些常見的數(shù)據(jù)格式讀取和輸出方法。
▼表3-1 Pandas中常見數(shù)據(jù)的讀取和輸出函數(shù)
輸入和輸出的方法如下:
讀取函數(shù)一般會賦值給一個變量df,df = pd.read_<xxx>();
輸出函數(shù)是將變量自身進(jìn)行操作并輸出df.to_<xxx>()。
01 CSV文件
CSV(Comma-Separated Values)是用逗號分隔值的數(shù)據(jù)形式,有時也稱為字符分隔值,因?yàn)榉指糇址部梢圆皇嵌禾枴SV文件的一般文件擴(kuò)展名為.csv,用制表符號分隔也常用.tsv作為擴(kuò)展名。CSV不僅可以是一個實(shí)體文件,還可以是字符形式,以便于在網(wǎng)絡(luò)上傳輸。
CSV文件的讀取方法如下(以下代碼省略了賦值操作):
#?文件目錄 pd.read_csv('data.csv')?#?如果文件與代碼文件在同一目錄下 pd.read_csv('data/my/data.csv')?#?指定目錄 pd.read_csv('data/my/my.data')?#?CSV文件的擴(kuò)展名不一定是.csv CSV文件可以存儲在網(wǎng)絡(luò)上,通過URL來訪問和讀取: #?使用URL pd.read_csv('https://www.gairuo.com/file/data/dataset/GDP-China.csv')CSV不帶數(shù)據(jù)樣式,標(biāo)準(zhǔn)化較強(qiáng),是最為常見的數(shù)據(jù)格式。Pandas為讀取CSV數(shù)據(jù)提供了強(qiáng)大的功能,了解更多詳細(xì)操作請閱讀《史上最全!用Pandas讀取CSV,看這篇就夠了》。
02 Excel
Excel電子表格是微軟公司開發(fā)的被廣泛使用的電子數(shù)據(jù)表格軟件,一般可以將它的使用分為兩類。一類是文字或者信息的結(jié)構(gòu)化,像排班表、工作日報(bào)、客戶名單之類,以文字為主;另一類為統(tǒng)計(jì)報(bào)表,如學(xué)生成績表、銷售表等,以數(shù)字為核心。
Pandas主要處理統(tǒng)計(jì)報(bào)表,當(dāng)然也可以對文字信息類表格做整理,在新版本的Pandas中加入了非常強(qiáng)大的文本處理功能。
Excel雖然易于上手,功能也很強(qiáng)大,但在數(shù)據(jù)分析中缺點(diǎn)也很明顯。
無法進(jìn)行復(fù)雜的處理:有時Excel提供的函數(shù)和處理方法無法滿足復(fù)雜邏輯。
無法支持更大的數(shù)據(jù)量:目前Excel支持的行數(shù)上限為1 048 576(2的20次方),列數(shù)上限為16 384(2的14次方,列標(biāo)簽為XFD),在數(shù)據(jù)分析、機(jī)器學(xué)習(xí)操作中往往會超過這個體量。
處理方法無法復(fù)用:Excel一般采用設(shè)定格式的公式,然后將數(shù)據(jù)再復(fù)制,但這樣仍然無法對數(shù)據(jù)的處理過程進(jìn)行靈活復(fù)用。
無法自動化:數(shù)據(jù)分析要經(jīng)過一個數(shù)據(jù)輸入、處理、分析和輸出的過程,這些都是由人工來進(jìn)行操作,無法實(shí)現(xiàn)自動化。
Pandas可以讀取、處理大體量的數(shù)據(jù),通過技術(shù)手段,理論上Pandas可以處理的數(shù)據(jù)體量無限大。編程可以更加自由地實(shí)現(xiàn)復(fù)雜的邏輯,邏輯代碼可以進(jìn)行封裝、重復(fù)使用并可實(shí)現(xiàn)自動化。
Pandas也提供了非常豐富的讀取操作,這些在《手把手教你用Python讀取Excel》有詳細(xì)介紹。最基礎(chǔ)的讀取方法如下:
#?返回DataFrame pd.read_excel('team.xlsx')?#?默認(rèn)讀取第一個標(biāo)簽頁Sheet pd.read_excel('path_to_file.xlsx',?sheet_name='Sheet1')?#?指定Sheet #?從URL讀取 pd.read_excel('https://www.gairuo.com/file/data/dataset/team.xlsx')03 JSON
JSON是互聯(lián)網(wǎng)上非常通用的輕量級數(shù)據(jù)交換格式,是HTTP請求中數(shù)據(jù)的標(biāo)準(zhǔn)格式之一。Pandas提供的JSON讀取方法在解析網(wǎng)絡(luò)爬蟲數(shù)據(jù)時,可以極大地提高效率。可如下讀取JSON文件:
#?data.json為同目錄下的一個文件 pd.read_json('data.json') 可以解析一個JSON字符串,以下是從HTTP服務(wù)檢測到的設(shè)備信息: jdata='{"res":{"model":"iPhone","browser":"Safari","version":"604.1"},"status":200}' pd.read_json(jdata) '''res??status browser??Safari?????200 model????iPhone?????200 version???604.1?????200 '''Pandas還提供了pd.json_normalize(data)方法來讀取半結(jié)構(gòu)化的JSON數(shù)據(jù)。
04 HTML
pd.read_html()函數(shù)可以接受HTML字符串、HTML文件、URL,并將HTML中的<table>標(biāo)簽表格數(shù)據(jù)解析為DataFrame。如返回有多個df的列表,則可以通過索引取第幾個。如果頁面里只有一個表格,那么這個列表就只有一個DataFrame。此方法是Pandas提供的一個簡單實(shí)用的實(shí)現(xiàn)爬蟲功能的方法。
dfs?=?pd.read_html('https://www.gairuo.com/p/pandas-io') dfs[0]?#?查看第一個df #?讀取網(wǎng)頁文件,第一行為表頭 dfs?=?pd.read_html('data.html',?header=0) #?第一列為索引 dfs?=?pd.read_html(url,?index_col=0)如果一個網(wǎng)頁表格很多,可以指定元素來獲取:
#?id='table'的表格,注意這里仍然可能返回多個 dfs1?=?pd.read_html(url,?attrs={'id':?'table'}) #?dfs1[0] #?class='sortable' dfs2?=?pd.read_html(url,?attrs={'class':?'sortable'})常用的參數(shù)與read_csv的基本相同。
05 剪貼板
剪貼板(Clipboard)是操作系統(tǒng)級的一個暫存數(shù)據(jù)的地方,它保存在內(nèi)存中,可以在不同軟件之間傳遞,非常方便。Pandas支持讀取剪貼板中的結(jié)構(gòu)化數(shù)據(jù),這就意味著我們不用將數(shù)據(jù)保存成文件,而可以直接從網(wǎng)頁、Excel等文件中復(fù)制,然后從操作系統(tǒng)的剪貼板中讀取,非常方便。
'''x?y?z a?1?2?3 b?4?5?6 c?7?8?9 '''#?復(fù)制上邊的數(shù)據(jù),然后直接賦值 cdf?=?pd.read_clipboard()變量cdf就是上述文本的DataFrame結(jié)構(gòu)數(shù)據(jù)。read_clipboard的參數(shù)使用與read_csv完全一樣。
06 SQL
Pandas需要引入SQLAlchemy庫來支持SQL,在SQLAlchemy的支持下,它可以實(shí)現(xiàn)所有常見數(shù)據(jù)庫類型的查詢、更新等操作。Pandas連接數(shù)據(jù)庫進(jìn)行查詢和更新的方法如下。
read_sql_table(table_name, con[, schema, …]):把數(shù)據(jù)表里的數(shù)據(jù)轉(zhuǎn)換成DataFrame。
read_sql_query(sql, con[, index_col, …]):用sql查詢數(shù)據(jù)到DataFrame中。
read_sql(sql, con[, index_col, …]):同時支持上面兩個功能。
DataFrame.to_sql(self, name, con[, schema, …]):把記錄數(shù)據(jù)寫到數(shù)據(jù)庫里。
以下是一些代碼示例:
#?需要安裝SQLAlchemy庫 from?sqlalchemy?import?create_engine #?創(chuàng)建數(shù)據(jù)庫對象,SQLite內(nèi)存模式 engine?=?create_engine('sqlite:///:memory:') #?取出表名為data的表數(shù)據(jù) with?engine.connect()?as?conn,?conn.begin():data?=?pd.read_sql_table('data',?conn)#?data #?將數(shù)據(jù)寫入 data.to_sql('data',?engine) #?大量寫入 data.to_sql('data_chunked',?engine,?chunksize=1000) #?使用SQL查詢 pd.read_sql_query('SELECT?*?FROM?data',?engine)07 小結(jié)
Pandas支持讀取非常多的數(shù)據(jù)格式,本文僅介紹了幾種常見的數(shù)據(jù)文件格式,更多格式可以在其官網(wǎng)查詢。
https://pandas.pydata.org/docs/user_guide/io.html
關(guān)于作者:李慶輝,數(shù)據(jù)產(chǎn)品專家,某電商公司數(shù)據(jù)產(chǎn)品團(tuán)隊(duì)負(fù)責(zé)人,擅長通過數(shù)據(jù)治理、數(shù)據(jù)分析、數(shù)據(jù)化運(yùn)營提升公司的數(shù)據(jù)應(yīng)用水平。精通Python數(shù)據(jù)科學(xué)及Python Web開發(fā),曾獨(dú)立開發(fā)公司的自動化數(shù)據(jù)分析平臺,參與教育部“1+X”數(shù)據(jù)分析(Python)職業(yè)技能等級標(biāo)準(zhǔn)評審。中國人工智能學(xué)會會員,企業(yè)數(shù)字化、數(shù)據(jù)產(chǎn)品和數(shù)據(jù)分析講師,在個人網(wǎng)站“蓋若”上編寫的技術(shù)和產(chǎn)品教程廣受歡迎。
本書摘編自《深入淺出Pandas:利用Python進(jìn)行數(shù)據(jù)處理與分析》,機(jī)械工業(yè)出版社華章公司2021年出版。轉(zhuǎn)載請與我們?nèi)〉檬跈?quán)。
延伸閱讀《深入淺出Pandas》
點(diǎn)擊上圖了解及購買
轉(zhuǎn)載請聯(lián)系微信:DoctorData
推薦語:這是一本全面覆蓋了Pandas使用者的普遍需求和痛點(diǎn)的著作,基于實(shí)用、易學(xué)的原則,從功能、使用、原理等多個維度對Pandas做了全方位的詳細(xì)講解,既是初學(xué)者系統(tǒng)學(xué)習(xí)Pandas難得的入門書,又是有經(jīng)驗(yàn)的Python工程師案頭必不可少的查詢手冊。《利用Python進(jìn)行數(shù)據(jù)分析》學(xué)習(xí)伴侶,用好Python必備。
刷刷視頻👇
干貨直達(dá)👇
視頻時代的大數(shù)據(jù):問題、挑戰(zhàn)與解決方案
一圖看懂邊緣計(jì)算整體架構(gòu)
這4種分析方法,大牛產(chǎn)品經(jīng)理都在用
一圖梳理企業(yè)數(shù)據(jù)治理的8項(xiàng)舉措
更多精彩👇
在公眾號對話框輸入以下關(guān)鍵詞
查看更多優(yōu)質(zhì)內(nèi)容!
讀書?|?書單?|?干貨?|?講明白?|?神操作?|?手把手
大數(shù)據(jù)?|?云計(jì)算?|?數(shù)據(jù)庫?|?Python?|?爬蟲?|?可視化
AI?|?人工智能?|?機(jī)器學(xué)習(xí)?|?深度學(xué)習(xí)?|?NLP
5G?|?中臺?|?用戶畫像?|?數(shù)學(xué)?|?算法?|?數(shù)字孿生
據(jù)統(tǒng)計(jì),99%的大咖都關(guān)注了這個公眾號
👇
總結(jié)
以上是生活随笔為你收集整理的手把手教你用Pandas读取所有主流数据存储的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: asp.net最常用的三十三种编程代码
- 下一篇: 一步一步学Remoting之二:激活模式