pandas讀取某一行的資料(pandas資料視覺化)
導讀:Pandas是一個基於Numpy庫開發的更高階的結構化資料分析工具,提供了Series、DataFrame、Panel等資料結構,可以很方便地對序列、截面資料(二維表)、面板資料進行處理。
作者:張秋劍 張浩 周大川 常國珍
來源:華章科技
- 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') csv
id 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'兩列,僅讀取前兩行 csv
id 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') csv
id name scores 0 1 小明 78.0 1 2 小紅 87.0 2 3 小白 99.0 3 4 小青 NaN 4 5 小蘭 NaN
05 以指定編碼方式讀取
讀取資料時,亂碼情況經常出現。這裡需要先弄清楚原始資料的編碼形式,再以指定的編碼形式讀取,例如sample.csv編碼為UTF-8,這裡以指定編碼(引數encoding)方式讀取。
csv = pd.read_csv('data/sample.csv', encoding='utf-8') csv
id 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》
推薦語:騰訊雲等資深資料架構師、商業分析師20年經驗,全流程講解金融資料分析思路、方法、技巧,快速入門到精通。