手把手教你使用Pandas读取结构化数据
導讀:Pandas是一個基于Numpy庫開發的更高級的結構化數據分析工具,提供了Series、DataFrame、Panel等數據結構,可以很方便地對序列、截面數據(二維表)、面板數據進行處理。
作者:張秋劍 張浩 周大川 常國珍
來源:大數據DT(ID:hzdashuju)
DataFrame是我們常見的二維數據表,包含多個變量(列)和樣本(行),通常被稱為數據框。
Series是一個一維結構的序列,包含指定的索引信息,可以被視作DataFrame中的一列或一行。其操作方法與DataFrame十分相似。
Panel是包含序列及截面信息的三維結構,通常被稱為面板數據。
我們可通過限定時間ID和樣本ID獲得對應的Series和DataFrame。
由于這些對象的常用操作方法十分相似,因此本文主要使用DataFrame進行演示。
01 讀取文件
Pandas庫提供了便捷讀取本地結構化數據的方法。這里主要以csv數據為例,read_csv函數可以讀取csv數據,代碼如下:
import?pandas?as?pd csv?=?pd.read_csv('data/sample.csv') csvid?name???scores 0???1??小明????78.0 1???2??小紅????87.0 2???3??小白????99.0 3???4??小青?99999.0 4???5??小蘭?????NaN按照慣例,Pandas會以pd為別名,以read_csv函數讀取指定路徑下的文件,然后返回一個DataFrame對象。如果在命令行中打印DataFrame對象,可讀性可能會略差一些;如果在Jupyter Notebook中打印的話,可讀性會大幅提升。
打印出來的DataFrame包含索引(第一列),列名(第一行)及數據內容(除第一行和第一列之外的部分)。
此外,read_csv函數有很多參數可以設置,如下所示。
filepath_or_buffer csv文件的路徑
sep = ','?分隔符,默認為逗號
header = 0 int類型,0代表第一行為列名,若設定為None將使用數值列名
names = [] list,重新定義列名,默認為None
usecols = [] list,定義讀取的列,設定后將縮短讀取數據的時間,并減小內存消耗,適合讀取大量數據,默認為None
dtype = {} dict,定義讀取列的數據類型,默認為None
nrows = None int類型,指定讀取數據的前n行,默認為None
na_values = ... str類型,list或dict,指定缺失值的填充值
na_filter = True bool類型,自動發現數據中的缺失值,默認值為True,若確定數據無缺失,可以設定值為False,以提高數據載入的速度
chunksize = 1000 int類型,分塊讀取,當數據量較大時,可以設定分塊讀取的行數,默認為None
encoding = 'utf-8'?str類型,數據的編碼,Python3默認編碼為UTF-8,Python2默認編碼為ASCII
Pandas除了可以直接讀取csv、excel、json、html等文件生成的DataFrame,也可以在列表、元組、字典等數據結構中創建DataFrame。
02 讀取指定行和指定列
使用參數usecol和nrows讀取指定的列和前n行,這樣可以加快數據讀取速度。讀取原數據的兩列、兩行示例如下。
csv?=?pd.read_csv('data/sample.csv',\usecols=['id','name'],\nrows=2)?#讀取'id'和'name'兩列,僅讀取前兩行 csvid?name 0???1??小明 1???2??小紅03 分塊讀取
參數chunksize可以指定分塊讀取的行數,并返回一個可迭代對象。這里,big.csv是一個4500行、4列的csv數據,設定chunksize=900,分5塊讀取數據,每塊900行,4個變量,如下所示:
csvs?=?pd.read_csv('data/big.csv',chunksize=900) for?i?in?csvs:print?(i.shape)(900,?4) (900,?4) (900,?4) (900,?4) (900,?4)可以使用pd.concat函數讀取全部數據:
csvs?=?pd.read_csv('data/big.csv',chunksize=900) dat?=?pd.concat(csvs,ignore_index=True) dat.shape(4500,?4)04 將不合理數據讀取為缺失值
在數據sample.csv中,“小青”的分數中有的取值為99999,這里令其讀取為缺失值,操作如下:
csv?=?pd.read_csv('data/sample.csv',na_values='99999') csvid?name??scores 0???1??小明???78.0 1???2??小紅???87.0 2???3??小白???99.0 3???4??小青????NaN 4???5??小蘭????NaN05 以指定編碼方式讀取
讀取數據時,亂碼情況經常出現。這里需要先弄清楚原始數據的編碼形式,再以指定的編碼形式讀取,例如sample.csv編碼為UTF-8,這里以指定編碼(參數encoding)方式讀取。
csv?=?pd.read_csv('data/sample.csv',encoding='utf-8') csvid?name???scores 0???1??小明????78.0 1???2??小紅????87.0 2???3??小白????99.0 3???4??小青?99999.0 4???5??小蘭?????NaN關于作者:張秋劍,就職于騰訊云金融拓展中心,從事微信財富營銷管理、數據中臺、AI應用等解決方案拓展工作,研究方向包括數字化轉型、創新實踐等。
張浩,曾任騰訊云金融首席架構師和星環科技金融行業技術總監,主要從事大數據、人工智能、云計算、區塊鏈、聯邦學習等相關技術研發與產品設計,具有豐富的企業架構設計、企業數字化戰略轉型運營與業務咨詢經驗。
周大川,就職于某中央金融企業金融科技研發中心,主要從事企業級數據平臺開發、核心業務平臺建設、AI賦能金融科技創新等工作,具有豐富的新一代金融業務系統建設經驗。
常國珍,曾任畢馬威咨詢大數據總監,具有近20年數據挖掘、精益數據治理、數字化運營咨詢經驗,是金融信用風險、反欺詐和反洗錢算法領域的專家。
本文摘編自《金融商業數據分析:基于Python和SAS》,經出版方授權發布。(ISBN:9787111695837)
《金融商業數據分析:基于Python和SAS》
點擊上圖了解及購買
轉載請聯系微信:DoctorData
推薦語:騰訊云等資深數據架構師、商業分析師20年經驗,全流程講解金融數據分析思路、方法、技巧,快速入門到精通。
劃重點👇
干貨直達👇
6本書,讀懂2022年最火的邊緣計算
終于有人把幸存者偏差講明白了
機器學習的挑戰:黑盒模型正面臨這3個問題
詳解數據分析體系構成框架
更多精彩👇
在公眾號對話框輸入以下關鍵詞
查看更多優質內容!
讀書?|?書單?|?干貨?|?講明白?|?神操作?|?手把手
大數據?|?云計算?|?數據庫?|?Python?|?爬蟲?|?可視化
AI?|?人工智能?|?機器學習?|?深度學習?|?NLP
5G?|?中臺?|?用戶畫像?|?數學?|?算法?|?數字孿生
據統計,99%的大咖都關注了這個公眾號
👇
總結
以上是生活随笔為你收集整理的手把手教你使用Pandas读取结构化数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度学习高能干货:手把手教你搭建MXNe
- 下一篇: 手把手教你用Flutter做炫酷动画