首先安裝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