Python 數據分析4

本章概要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,有需求的時候看一下就行了,不必太關注

相關文章
相關標籤/搜索