手把手教你使用 Pandas 讀取結構化數據

導讀: Pandas 是一個基於 Numpy 庫開發的更高級的結構化數據分析工具,提供了 Series、DataFrame、Panel 等數據結構,可以很方便地對序列、截面數據(二維表)、面板數據進行處理。

作者:張秋劍 張浩 周大川 常國珍

來源:大數據 DT(ID:hzdashuju)

我們可通過限定時間 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 函數有很多參數可以設置,如下所示。

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)

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/fS87lLQL8Rt_FRD-enYpTg