本章概要python
數據加載、存儲與文件格式正則表達式
讀取文本格式數據工具
read_csv 默認是按照逗號分割,也可設定其餘分割符spa
df = pd.read_csv('file', sep='|')
也可使用read_table,可是必需要指定分隔符code
df = pd.read_table('examples/ex1.csv', sep=',')
一些參數設置對象
pd.read_csv('examples/ex2.csv', header=None) # 一些文件沒有列標題,能夠設置文件頭爲空 pd.read_csv('examples/ex2.csv', names=['a', 'b', 'c', 'd', 'message']) # 也能夠爲沒有列標題的文件自定義列標題 pd.read_csv('examples/ex2.csv', names=names, index_col='message') # 自定義的列標題中的message列放到索引位置 parsed = pd.read_csv('examples/csv_mindex.csv', index_col=['key1', 'key2']) # 使用文件內多個列作成層次化索引 result = pd.read_table('examples/ex3.txt', sep='\s+') # 有些時候表格不是按照固定的分割符去分割字段的,能夠在分隔符參數傳入正則表達式 這裏的\s+表示的是匹配空格符,空格,製表符,換頁符 pd.read_csv('examples/ex4.csv', skiprows=[0, 2, 3]) # 有些文件可能會有一些註釋,描述性文字在文件頭,能夠經過skiprows參數跳過指定行 result = pd.read_csv('examples/ex5.csv') pd.isnull(result) # 判斷dataframe裏面的每一個值是否爲空,在值的位置返回布爾值 result = pd.read_csv('examples/ex5.csv', na_values=['NULL']) # 能夠接受列表來表示缺失值的字符串 sentinels = {'message': ['foo', 'NA'], 'something': ['two']} pd.read_csv('examples/ex5.csv', na_values=sentinels) # 能夠用字典爲指定列定製不一樣的NA標記值
逐塊讀取文本文件blog
在處理大文件時,可能只是想讀取文件的一小部分或逐塊對文件進行迭代。索引
pd.options.display.max_rows = 10
設置大文件的dataframe顯示10行,前5後5three
pd.read_csv('examples/ex6.csv', nrows=5) # 只讀取5行 chunker = pd.read_csv('ch06/ex6.csv', chunksize=1000) chunker <pandas.io.parsers.TextParser at 0x8368250> # read_csv所返回的這個TextParser對象使你能夠根據chunksize對文件進行逐塊迭代。 chunker = pd.read_csv('examples/ex6.csv', chunksize=1000) tot = Series([]) for piece in chunker: tot = tot.add(piece['key'].value_counts(), fill_value=0) tot = tot.sort_values(ascending=False) # 咱們能夠迭代處理ex6.csv,將值計數聚合到"key"列中
數據寫出到文本格式ip
data = pd.read_csv('test/ex5.csv') # 讀取文件到dataframe data.to_csv('test/out.csv') # 將數據寫入文件,默認逗號分割 data.to_csv(sys.stdout, sep='|') # 也能夠設定分隔符 data.to_csv(sys.stdout, na_rep='NULL') # 缺失值在輸出結果中會被表示爲空字符串 data.to_csv(sys.stdout, index=False, header=False) #能夠禁用行列索引 data.to_csv(sys.stdout, index=False, columns=['a', 'b', 'c']) # 還能夠指定寫入你須要的列,並按順序排列 series.to_csv('examples/tseries.csv') # series也有寫如的to_csv方法
處理分隔符格式
大部分存儲在磁盤上的表格型數據都能用pandas.read_table進行加載。然而,有時仍是須要作一些手工處理。因爲接收到含有畸形行的文件而使read_table出毛病的狀況並很多見。爲了說明這些基本工具,看看下面這個簡單的CSV文件:
In [1]: !cat examples/ex7.csv "a","b","c" "1","2","3" "1","2","3"
對於任意單字符分隔符文件,能夠直接使用內置的csv模塊,將任意已打開的文件或文件型的對象傳給csv.reader
import csv f = open('examples/ex7.csv') reader = csv.reader(f)
In [2]: for line in reader: ....: print(line) ['a', 'b', 'c'] ['1', '2', '3'] ['1', '2', '3']
如今,爲了使數據格式合乎要求,你須要對其作一些整理工做。咱們一步一步來作。首先,讀取文件到一個多行的列表中:
In [3]: with open('examples/ex7.csv') as f: ....: lines = list(csv.reader(f))
而後,咱們將這些行分爲標題行和數據行:
In [4]: header, values = lines[0], lines[1:]
而後,咱們能夠用字典構造式和zip(*values),後者將行轉置爲列,建立數據列的字典:
In [5]: data_dict = {h: v for h, v in zip(header, zip(*values))} In [6]: data_dict Out[7]: {'a': ('1', '1'), 'b': ('2', '2'), 'c': ('3', '3')}
CSV文件的形式有不少。只需定義csv.Dialect的一個子類便可定義出新格式(如專門的分隔符、字符串引用約定、行結束符等):
class my_dialect(csv.Dialect): lineterminator = '\n' delimiter = ';' quotechar = '"' quoting = csv.QUOTE_MINIMAL reader = csv.reader(f, dialect=my_dialect)
各個CSV語支的參數也能夠用關鍵字的形式提供給csv.reader,而無需定義子類:
reader = csv.reader(f, delimiter='|')
要手工輸出分隔符文件,你可使用csv.writer。它接受一個已打開且可寫的文件對象以及跟csv.reader相同的那些語支和格式化選項:
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'))
其餘格式的數據讀取
https://www.jianshu.com/p/047d8c1c7e14,有需求的時候看一下就行了,不必太關注