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

首先安裝pandas模塊
pip Install pandas 或安裝集成環(huán)境 anaconda(需要下載安裝包)

  • pandas中讀取文件的解析函數(shù)

read_csv()思喊、read_table() 從文件中國揍移、url只损、文件型對象中加載帶分隔符的數(shù)據(jù),默認(rèn)逗號
read_fwf() 讀取定寬列格式數(shù)據(jù)
raed_clipboard() 讀取剪切板中的數(shù)據(jù)
分隔符參數(shù):sep:指定分隔符, 支持正則表達(dá)式

上述函數(shù)將文本數(shù)據(jù)轉(zhuǎn)換成DataFrame對象包各,這些函數(shù)的選項(xiàng)分為:
1、索引:將一個或多個列當(dāng)成返回的DataFrame處理靶庙,以及是否叢文件问畅、用戶獲取列名
2、類型推斷和數(shù)據(jù)轉(zhuǎn)換:包括用戶定義值的轉(zhuǎn)換六荒、缺失值標(biāo)記列表等
3护姆、日期解析:包括組合功能,如將分散在多個列中的日期時(shí)間組合成結(jié)果中的單個列
4掏击、迭代:支持對大文件進(jìn)行逐塊迭代
5卵皂、不規(guī)整數(shù)據(jù)問題:跳過一些行,頁腳砚亭。注釋或其他不重要的部分

  • read_csv()讀取文件
!cat ex1.csv # ipython環(huán)境支持 linux命令

a,b,c,d,message
1,2,3,4,hello
5,6,7,8,world
9,10,11,12,foo

import pandas as pd
import numpy as np
# 使用read_csv()讀取文件
# 自己定義列名, 使用names參數(shù)灯变,接受一個列表
pd.read_csv('data/ex1.csv', sep=',', names=['a','b','c','d', 'message']) # sep 指定分隔符
# 使用默認(rèn)的列名
pd.read_csv('data/ex2.csv', header=None)
# 如果想把某個列指定為DataFrame對象的索引捅膘,使用index_col參數(shù)
names = ['a','b','c','d','message']
pd.read_csv('data/ex2.csv', names=names, index_col='message')
# 如果想為DataFrame對象設(shè)置層次化索引添祸,index_col參數(shù)接受由列編號或列名組成的列表即可
parsed = pd.read_csv('data/csv_mindex.csv', index_col=['key1', 'key2'])
parsed
  • 分隔符, 使用正則表達(dá)式分隔
result = pd.read_table('data/ex3.txt', sep='\s+')
result# 由于列名比數(shù)據(jù)行的數(shù)量少寻仗,所以read_csv或read_table推斷第一列應(yīng)該是DataFrame的索引
  • 不規(guī)整數(shù)據(jù)問題
# 使用參數(shù)來處理異常數(shù)據(jù)刃泌,例如skiprows可以跳過指定索引行,跳過文件中的注釋數(shù)據(jù)
pd.read_csv('data/ex4.csv', skiprows=[0,2,3])
 !cat data/ex4.csv # 打印ex4.csv數(shù)據(jù)
# hey!
a,b,c,d,message
# just wanted to make things more difficult for you
# who reads CSV files with computers, anyway?
1,2,3,4,hello
5,6,7,8,world
9,10,11,12,foo
  • 缺失值處理
!cat data/ex5.csv
""" 該數(shù)據(jù)為ex5.csv
something,a,b,c,d,message
one,1,2,3,4,NA
two,5,6,,8,world
three,9,10,11,12,foo
"""
result = pd.read_csv('data/ex5.csv')
result
pd.isnull(result) # 得到DataFrame數(shù)據(jù)對象是否為空的DataFrame數(shù)據(jù)對象
# na_values參數(shù)接受一組用于表示缺失值的字符串, 傳給na_values的值,將會被NaN替換
result = pd.read_csv('data/ex5.csv', na_values=['NULL
result
# 使用字典為各列指定不同的NA標(biāo)記, 將字典傳給na_values參數(shù)
sentinels = {'message':['foo','NA'],'something':['two']}
pd.read_csv('data/ex5.csv', na_values=sentinels)
  • read_csv/read_table參數(shù)

path #表示文件系統(tǒng)位置署尤,URL耙替,文件型對象的字符串
sep or delimiter #用于對行中各字段進(jìn)行拆分的字符序列或正則
header #用作列名的行號
index_col #用作行索引的列編號或列名
names #用于結(jié)果的列名列表,結(jié)合header=None
skiprows #從文件開始處開始曹体,需要跳過的行索引
na_values #用于替換NA的值
comments #用于將注釋信息叢行尾拆分出去的字符
parse_dates # 嘗試將數(shù)據(jù)解析成日期
date_parser #用于解析日期函數(shù)
nrows #需要讀取的行數(shù)
iterator #返回一個TextParser對象以便逐行讀取文件
chunksize #文件塊的大小
skip_footer #需要忽略的行數(shù)(從末尾開始)
encoding #指定編碼
squeeze #如果數(shù)據(jù)經(jīng)過解析后僅含有一列俗扇,則返回Series對象
thousands #千分位分隔符

# nrows 指定讀取的行數(shù)
result = pd.read_csv('data/ex6.csv',nrows=10)
result
# 逐塊讀取文本文件, chunksize參數(shù)接受行數(shù)
chunker = pd.read_csv('data/ex6.csv', chunksize=1000)
# chunker # 返回一個TextParser對象
tot = pd.Series([])
for piece in chunker:
    tot = tot.add(piece['key'].value_counts(), fill_value=0)
# tot = tot.order(ascending=False)
tot[:10]
  • 寫出數(shù)據(jù)到文件
# 將數(shù)據(jù)寫出到文本格式
data = pd.read_csv('data/ex5.csv')
print(data)
# 使用to_csv()方法將數(shù)據(jù)寫到一個以逗號分隔符的文件中
data.to_csv('data/ex5out.csv')
!cat data/ex5out.csv
# to_csv() 支持其他分隔符
import sys
data.to_csv(sys.stdout, sep='|')
# 缺失值在輸出時(shí)會被表示成空字符串
# 處理缺失值,設(shè)置缺失值標(biāo)記
data.to_csv(sys.stdout, na_rep='NULL')
# 寫出禁用行和列標(biāo)簽
data.to_csv(sys.stdout, index=False, header=False)
# 只寫出一部分箕别,寫出順序按照指定順序
data.to_csv(sys.stdout, index=False, columns=['a','b','c'])
dates = pd.date_range('1/1/2000', periods=7)
ts = pd.Series(np.arange(7), index=dates)
ts.to_csv('data/tseries.csv')
!cat data/tseries.csv
  • Series對象讀取數(shù)據(jù)
pd.Series.from_csv('data/tseries.csv', parse_dates=True)
  • python 內(nèi)置的csv模塊
import csv
f = open('data/ex7.csv')
reader = csv.reader(f)
for line in reader:
    print line
# 處理數(shù)據(jù)格式
lines = list(csv.reader(open('data/ex7.csv')))
header, values = lines[0], lines[1:]
data_dict = {h: v for h, v in zip(header, zip(*values))}
data_dict
# CSV文件的形式很多狐援,可以繼承csv.Dialect钢坦,創(chuàng)建子類類定義新格式
'''參數(shù)
delimiter 分隔符
lineterminator 行結(jié)束符
quotechar 字段引用符號
quoting 引用約定
skipinitialspace  忽略分隔符后面的空格符,默認(rèn)False
doublequote 處理字段內(nèi)的引用符號啥酱,True為雙寫
escapechar 用于對分隔符進(jìn)行轉(zhuǎn)義的字符串
'''
f = open('data/ex7.csv')
class my_dialect(csv.Dialect):
    lineterminator = '\n' # 行結(jié)束符
    delimiter = ';'# 分隔符
    quotechar = '"' # 字符串引用約定
    quoting=1
reader = csv.reader(f, my_dialect)
for line in reader:
    print line
# 手工輸出分隔符文件
with open('mydata.csv', 'w') as f:
    writer = csv.writer(f, dialect=my_dialect)
    writer.writerow(('one','two', 'three'))
    writer.writerow(('1','2','3'))
    writer.writerow(('4','5','6'))
    writer.writerow(('7','8','9'))
!cat mydata.csv
  • json 與DataFrame
obj="""
{"name":"wes",
"places_lived":["United States", "Spain","Germany"],
"pet":null,
"siblings":[{"name":"Katie","age":33,"pet":"Cisco"}]
}
"""
import json
result = json.loads(obj) # 將字符串轉(zhuǎn)換成json格式
print(type(result))
###
asjson = json.dumps(result)# 將python對象轉(zhuǎn)換成json
siblings = pd.DataFrame(result['siblings'], columns=['name','age'])
siblings
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末爹凹,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子镶殷,更是在濱河造成了極大的恐慌禾酱,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绘趋,死亡現(xiàn)場離奇詭異颤陶,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)陷遮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門滓走,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人帽馋,你說我怎么就攤上這事搅方。” “怎么了绽族?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵姨涡,是天一觀的道長。 經(jīng)常有香客問我吧慢,道長涛漂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任检诗,我火速辦了婚禮匈仗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘逢慌。我一直安慰自己锚沸,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布涕癣。 她就那樣靜靜地躺著哗蜈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪坠韩。 梳的紋絲不亂的頭發(fā)上距潘,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機(jī)與錄音只搁,去河邊找鬼音比。 笑死,一個胖子當(dāng)著我的面吹牛氢惋,可吹牛的內(nèi)容都是我干的洞翩。 我是一名探鬼主播稽犁,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼骚亿!你這毒婦竟也來了已亥?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤来屠,失蹤者是張志新(化名)和其女友劉穎虑椎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體俱笛,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡捆姜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了迎膜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片泥技。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖磕仅,靈堂內(nèi)的尸體忽然破棺而出珊豹,到底是詐尸還是另有隱情,我是刑警寧澤宽涌,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站蝶棋,受9級特大地震影響卸亮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜玩裙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一兼贸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧吃溅,春花似錦溶诞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至赖歌,卻和暖如春枉圃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背庐冯。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工孽亲, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人展父。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓返劲,卻偏偏與公主長得像玲昧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子篮绿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容