Pandas 讀取文本數據

Pandas 讀取文本數據

標籤(空格分隔): python pandas


Pandas 讀取文本數據

pandas解析函數
解析函數

如果原始數據是有標題的
原始數據
read_csv調用
read_csv示例
read_table
這裏可以指定seq=’\s+’等正則表達式來當分割符
如果列名比數據行數量少1,read_table會推斷第一列是DataFrame的索引
read_table示例

指定列名
如果沒有標題,那麼可以自定義列名(names=[])或者分配默認列名(header=None)

 pd.read_csv(path, header=Node)
 pd.read_table(path, names=['a','b'])

指定索引
如果想要將指定列設置爲DataFrame索引可以明確指定message該列放到索引位置或者通過index_col來指定”message”,想要指定多列依次傳入由列編號或者列名組成的列表

pd.read_csv(path, names=[], index_col=['key1', 'key2'])

跳過指定行
使用skiprows參數
pd.read_csv(path, skip_rows=[0, 2, 3])

缺失值處理
默認情況下Pandas會用一組經常出現標記值進行識別,如NA -1.#IND 以及NULL等,也就說把數據中出現這些數據的當初NaN缺失

讀取缺失值

也可以使用na_values指定的表示缺失值的字符串
pd.read_csv(path, na_values=['NULL'])

還可以使用一個字典sentinels爲不同列指定不同的表示缺失值的字符串
指定缺失值

read_csv/read_table 參數解釋

參數解釋1
參數解釋2
參數解釋3

逐塊讀取文件
只想讀取幾行,使用nrows進行指定
pd.read_table(path, nrows=5)

要逐塊讀取文件,需要設置chunksize(行數).
read_csv返回TextParser對象讓你可以根據chunksize對文件逐塊迭代
如下圖所示,可能這樣能夠提高效率?

將數據寫到文本格式
如下圖所示

  • 用seq指定分隔符eg, seq=’|’
  • 缺失值在輸出會爲空字符串,用na_seq=’NULL’指定特定字符串
  • path參數使用sys.stdout表示只輸出
  • 默認會輸出行列標籤,可以用index=False,header=False禁用
  • 只輸出部分列以及指定順序,可以用cols=[‘a’, ‘b’]

手工處理分隔符格式

一個簡單的處理例子如下

定義一個新讀取寫格式

JSON數據
可以通過json.loads即可將JSON字符串Python形式,json.dump將Python轉爲JSON格式

 import json
 result = jsons.loads(obj)
 boj2 = jsons.dump(result)

XML和HTML:WEB收集信息
一個簡單的讀取HTML demo

links是上面獲取的結果,這裏links存的是對象的集合,要想獲取URL等信息需要使用對象的的get方法

 lnk = links[28]
 lnk.get('herf')
 lnk.text_content()

具體關於XML的後面自己看書吧

讀取Execl
ExeclFile需要用到xlrd和openpyxl兩個包,所以需要先安裝,以下是創建一個ExeclFile實例以及使用parse讀取到DataFrame

 xls_file = pd.ExeclFile(path)
 table = xls_file.parse('Sheet1')

使用HTML和API
許多網站可以通過JSON或其他格式提供公共的API,可以通過python訪問這些api,其中比較簡單的是request

比如在Twitter搜索”pyhton panda”,可以發送一個gets請求

import requests
url = '...'
resp = requests.get(url)
# response對象text屬性含有GET請求
# 許多返回的都是JSON字符串,我們需要加載到  pyhton 對象
import json
data = json.loads(resp.txt)

從數據中取樣

利用Pandas庫中的sample。

DataFrame.sample(n=None, frac=None, replace=False,weights=None, random_state=None, axis=None)

n是要抽取的行數。(例如n=20000時,抽取其中的2W行)

frac是抽取的比列。(有一些時候,我們並對具體抽取的行數不關係,我們想抽取其中的百分比,這個時候就可以選擇使用frac,例如frac=0.8,就是抽取其中80%)

replace抽樣後的數據是否代替原DataFrame()

weights這個是每個樣本的權重,具體可以看官方文檔說明。

random_state這個在之前的文章已經介紹過了。

axis是選擇抽取數據的行還是列。axis=0的時是抽取行,axis=1時是抽取列(也就是說axis=1時,在列中隨機抽取n列,在axis=0時,在行中隨機抽取n行)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章