數(shù)據(jù)加載、存儲與文件格式

文本格式

1.解析函數(shù)

解析函數(shù) 說明
read_csv 文件叛复、URL仔引、文件型對象—有分隔符的數(shù)據(jù)(默認,)
read_table 文件致扯、URL肤寝、文件型對象—有分隔符的數(shù)據(jù)(默認\t)
read_fwf 讀取定寬,無分隔符
read_clipboard 讀取剪貼板(read_table)

? 功能:索引抖僵,類型推斷和數(shù)據(jù)轉(zhuǎn)化,日期解析缘揪,迭代耍群,不規(guī)整數(shù)據(jù)問題

? 參數(shù):

? 自定義列名:names=[]

? 列做索引:index_col='col_name'

? 分隔符:sep='\s+'不固定空格數(shù)

read_csv/read_table 參數(shù) 說明
path 位置,URL找筝,文件型對象
sep或delimiter 分隔符
header 列明行號蹈垢,默認0,可選None
index_col 索引的列編號或列名
skiprows 忽略行數(shù)
na_values 替換NA的值
comment 注釋從行尾分出去的字符
parse_dates 解析為日期袖裕,默認False曹抬,可指定列號列名
keep_date_col 連接多列解析日期
converters 列號列名與函數(shù)之間的映射關(guān)系組成的字典,<br />{foo:f}急鳄,foo列執(zhí)行f函數(shù)
dayfirst 日期
date_praser 日期
nrows 讀取的行數(shù)目
iterator 返回TextParser谤民,逐塊讀取
chunksize 文件塊的大小
skip_footer 忽略的行數(shù)(從行尾)
verbose 打印解析器輸出
encoding Unicode編碼格式
squeeze 僅含一列時堰酿,返回Series
thousands 千分位分隔符

逐塊讀取:

? 只讀取幾行:nrow=5张足,5行

? 逐塊:chunksize=, 讀却ゴ础:TextParser

chunker = pd.read_csv('a.csv',chunksize=1000)

tot = Series([])
for piece in chunker:
    tot = tot.add(piece['key'].value_counts(), fill_value=0)

寫出to_csv:

? 禁用:index=False

? 僅部分列:cols=[]

? 缺失值為空:na_rep='Null'

Series也有to_csv方法

? 讀取為Series:Series.from_csv()

手工處理分隔符格式:

import csv

f = open('a.csv')
reader = csv.reader(f)

for line in reader:
    print line  #元組形式
    
# 整理格式:dict
lines = list(reader)
header, values = lines[0],lines[:1]
data_dict = {h:v for h, v in zip(header, zip(*values))}

#傳入子類
class my_dialect(csv.Dialect):
    lineterminator = '/n'
    delimier = ';'
    quotechar = ':'
reader = csv.reader(f,dialect=my_dialect)   #也可以關(guān)鍵字形式傳入
csv語句選項 說明
delimiter 分隔符
lineterminator 行尾符號
quotechar 引用,帶特殊字符的引用
quoting 引用为牍,(多個可選值)
skipinitialspace 忽略分隔符后的空格
doublequote 引用符哼绑,True為雙寫
escapechar 對分隔符進行轉(zhuǎn)義的字符(quoting)

手工輸出分隔符文件csv.writer

with open('a.csv', 'w') as f:
    writer = csv.writer(f, dialect=my_dialect)
    writer.writerow(...)
    writer.writerow(...)

2.JSON

HTTP請求在Web和其他應(yīng)用程序之間發(fā)送的數(shù)據(jù)標準格式之一

import json

# 載入或輸出(dict),load和jump針對文件
result = json.loads(obj)

asjson = json.jumps(result)

# 轉(zhuǎn)化為DataFrame
siblings = DataFrame(result['slibings'], columns=['name','age'])

3.HTML: lxml

from lxml.html import parse
from urllib2 import urlopen

# 獲取 標簽
parsed = parse(urlopen('http://funance.yahoo.com/q/op?s=AAPL+Options'))
doc = parsed.getroot()  #獲取根節(jié)點

# 查詢a標簽
links = doc.findall('./a')

# 獲取url、文本
lnk = links[28]
lnk.get('href')
lnk.text_content()

# 推導式形式:a標簽的href
urls = [lnk.get('href') for lnk in doc.findall('./a')]

# 找出表格
tables = doc.findall('./table')
calls = table[9]
puts = table[13]

# 找出row的所有'td'子標簽的text
def _upack(row, kind='td'):
    elts = row.findall('.//%s' % kind)
    return [val.text_content() for val in elts]


# 自動轉(zhuǎn)化類型TextParser:部分列轉(zhuǎn)換為浮點
from pands.io.parsers import TextParser
def parse_options_data(table):
    rows = table.findall('./tr')            # 每行tr標簽行
    header = _unpack(row[0], kind='th')     # 標題行
    data = [_unpack(r) for r in rows[1:]]   # 內(nèi)容
    return TextParser(data, names=header).get_chunk()

# 得到最終DataFrame
call_data = parse_options_data(calls)
put_data = parse_options_data(puts)

4.XML: lxml.objectify

常見的支持分層碉咆、嵌套抖韩、元數(shù)據(jù)的結(jié)構(gòu)化數(shù)據(jù)格式

from lxml import objectify
path = '文件名'
parsed = objectify.parse(open(path))
root = parsed.getroot()

# 提取數(shù)據(jù)
data = []
skip_field = ['不需要','提取的','標簽']
for elt in root.INDICATOR:          # 所有indicator標簽
    for child in elt.children:      # 遍歷所有indicator標簽的子標簽
        if child.tag in skip_field:
            continue
        el_data = {child.tag: child.pyval}  #pyval屬性得到對應(yīng)的數(shù)據(jù)值,text字符串
    data.append(el_data)

二進制

使用python內(nèi)置的pickle序列化,僅使用短期存儲

? 存儲:frame.save()

? 讀纫咄:pd.load()

HDF5

高效讀寫磁盤上以二進制格式存儲的科學數(shù)據(jù)茂浮,工業(yè)級庫C庫,有許多語言接口块攒。每個HDF5都含有文件系統(tǒng)式的節(jié)點結(jié)構(gòu)励稳。分塊讀寫,適合海量數(shù)據(jù)囱井。

python中有兩個接口:PyTables驹尼、h5py

pandas有類似字典的HDFStore類庞呕,通過PyTables存儲新翎,可像字典一樣獲取

store = pd.HDFStore('mydata.h5')    # 文件名
# 內(nèi)容
store['obj1'] = frame
stroe['obj1_col1'] = frame['a']

Microsoft Excel

需要xlrd和openyxl包

# 創(chuàng)建實例
xls_file = pd.ExcelFile('data.xls')
# 讀取sheet1
table = xls_file.parse('sheet1')

HTML和Web API: requests

import requests
import json
resp = request.get(url)         #url網(wǎng)址,get請求
data = json.loads(resp.text)    #text是內(nèi)容,json加載
print(data.keys())

數(shù)據(jù)庫

sqlite3

import sqlite3
query = """
CREATE TABLE test
(a VARCHAR(20), b VARCHAR(20),
c REAL,         d INTEGER
);"""
con = sqlite3.connect(':memory:')   #放在內(nèi)存中
# conn=sqlite3.connect('urls.db') 鏈接數(shù)據(jù)庫
con.execute(query)
con.commit()

# 查詢住练,顯示所有
cursor = con.execute('select * from test')
rows = cursor.fetchall()    #fetchone
# description屬性
print(cursor.description)

簡化:read_frame()函數(shù)

import pandas.io.sql as sql
# 只需要語句和鏈接對象
sql.read_frame('select * from test', con)

MongoDB(NoSQL):pymongo

import pymongo
con = pymongo.Connection('localhost', port=27017) # 默認端口進行連接
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末地啰,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子讲逛,更是在濱河造成了極大的恐慌亏吝,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盏混,死亡現(xiàn)場離奇詭異蔚鸥,居然都是意外死亡,警方通過查閱死者的電腦和手機许赃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門止喷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人混聊,你說我怎么就攤上這事弹谁。” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵预愤,是天一觀的道長沟于。 經(jīng)常有香客問我,道長鳖粟,這世上最難降的妖魔是什么社裆? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮向图,結(jié)果婚禮上泳秀,老公的妹妹穿的比我還像新娘。我一直安慰自己榄攀,他們只是感情好嗜傅,可當我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著檩赢,像睡著了一般吕嘀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贞瞒,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天偶房,我揣著相機與錄音,去河邊找鬼军浆。 笑死棕洋,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的乒融。 我是一名探鬼主播掰盘,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼赞季!你這毒婦竟也來了愧捕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤申钩,失蹤者是張志新(化名)和其女友劉穎次绘,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體撒遣,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡断盛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了愉舔。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡伙菜,死狀恐怖轩缤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤火的,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布壶愤,位于F島的核電站,受9級特大地震影響馏鹤,放射性物質(zhì)發(fā)生泄漏征椒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一湃累、第九天 我趴在偏房一處隱蔽的房頂上張望勃救。 院中可真熱鬧,春花似錦治力、人聲如沸蒙秒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽晕讲。三九已至,卻和暖如春马澈,著一層夾襖步出監(jiān)牢的瞬間瓢省,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工痊班, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留勤婚,地道東北人。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓辩块,卻偏偏與公主長得像蛔六,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子废亭,可洞房花燭夜當晚...
    茶點故事閱讀 45,573評論 2 359