轉載 「 理想國@Data 」重拾Python(5):數據讀取 博客

重拾Python(5):數據讀取

 

本文主要對Python如何讀取數據進行總結梳理,涵蓋從文本文件,尤爲是excel文件(用於離線數據探索分析),以及結構化數據庫(以Mysql爲例)中讀取數據等內容。php

約定:css

import numpy as np import pandas as pd

一、從文本文件中讀取

(1)使用Python標準庫中的read、readline、readlines方法讀取

a. 通常流程:
step1: 經過open方法建立一個文件對象
setp2: 經過read、readline、readlines方法讀取文件內容
step3: 經過close方法關閉文件對象
b. 區別:
示例:test.txt
html

read方法:讀取所有數據,結果爲一個字符串(全部行合併爲一個字符串)python

#打開文件 f = open('/labcenter/python/pandas/test.txt') #使用read方法讀取文件 data1 = f.read() print data1 type(data1) #關閉文件 f.close()

結果:mysql

col1 col2 col3 101 20 0.68 102 30 0.79 103 50 0.72 104 60 0.64 105 70 0.55 str

readline方法:讀取一行數據,結果爲一個字符串,須要seek\next等指針操做方法配合實現全部記錄的遍歷。nginx

#打開文件 f = open('/labcenter/python/pandas/test.txt') #使用readline方法讀取文件 data2 = f.readline() print data2 type(data2) #關閉文件 f.close()

結果:sql

col1 col2 col3 str

readlines方法:讀取所有數據,結構爲一個列表(一行爲列表中的一個元素)shell

#打開文件 f = open('/labcenter/python/pandas/test.txt') #使用readlines方法讀取文件 data3 = f.readlines() print data3 type(data3) for line in data3: print line #關閉文件 f.close()

結果:數據庫

['col1 col2 col3\r\n', '101 20 0.68\r\n', '102 30 0.79\r\n', '103 50 0.72\r\n', '104 60 0.64\r\n', '105 70 0.55'] list col1 col2 col3 101 20 0.68 102 30 0.79 103 50 0.72 104 60 0.64 105 70 0.55

c. 支持文件範圍:
txt\csv\tsv及全部以固定分隔符分隔的文本文件。json

(2)使用Numpy庫中的loadtxt、load、fromfile方法讀取

a. loadtxt方法
從txt文本文件中讀取,返回一個數組。
np.loadtxt('/labcenter/python/pandas/test.txt',skiprows=1)
Out[413]:
array([[ 101. , 20. , 0.68],
[ 102. , 30. , 0.79],
[ 103. , 50. , 0.72],
[ 104. , 60. , 0.64],
[ 105. , 70. , 0.55]])
b. load方法
讀取Numpy專用的二進制數據文件,該文件一般基於Numpy的save或savez方法生成。

write = np.array([[1,2,3,4],[5,6,7,8]]) np.save('output',write) data = np.load('output.npy') print data type(data)

結果:

[[1 2 3 4] [5 6 7 8]] numpy.ndarray

c. fromfile方法
讀取簡單的文本文件和二進制文件,該文件一般基於Numpy的tofile方法生成。

write = np.array([[1,2,3,4],[5,6,7,8]]) write.tofile('output') data = np.fromfile('output',dtype='float32') print data type(data)

結果:

[  1.40129846e-45 0.00000000e+00 2.80259693e-45 ..., 0.00000000e+00 1.12103877e-44 0.00000000e+00] numpy.ndarray

(3)使用Pandas庫中的read_csv、read_table、read_excel等方法讀取

a. read_csv方法
讀取csv文件,返回一個DataFrame對象或TextParser對象。
示例:
test.csv

data = pd.read_csv('/labcenter/python/pandas/test.csv') print data type(data)

結果:

col1 col2 col3 0 101 20 0.68 1 102 30 0.79 2 103 50 0.72 3 104 60 0.64 4 105 70 0.55 pandas.core.frame.DataFrame

b. read_table方法
讀取通用分隔符分隔的文本文件,返回一個DataFrame對象或TextParser對象。

data = pd.read_table('/labcenter/python/pandas/test.csv',sep=',') print data type(data)

結果:

col1 col2 col3 0 101 20 0.68 1 102 30 0.79 2 103 50 0.72 3 104 60 0.64 4 105 70 0.55 pandas.core.frame.DataFrame

c. read_excel方法
讀取excel文件,返回一個DataFrame對象或TextParser對象。
示例:
test.xlsx

data = pd.read_excel('/labcenter/python/pandas/test.xlsx') print data type(data)

結果:

col1 col2 col3 0 101 21 22.6 1 102 31 31.2 2 103 41 32.7 3 104 51 28.2 4 105 61 18.9 pandas.core.frame.DataFrame

d. 其餘方法
read_sql方法:讀取sql請求或者數據庫中的表。
read_json方法:讀取json文件。

(4)如何選擇?

a. 選取本身最熟悉的方法。

b. 根據場景選擇:
① 對純文本、非結構化的數據:標準庫的三種方法
② 對結構化、數值型,而且要用於矩陣計算、數據建模的:Numpy的loadtxt方法
③ 對於二進制數據:Numpy的load和fromfile方法
④ 對於結構化的數據,而且要用於數據探索分析的:Pandas方法

二、從Excel文件中讀取

excel每每是在進行離線數據探索分析時提供的數據文件格式,所以這裏單獨拿出來多總結一下。

(1)使用Pandas庫的read_excel方法

見上文1.3.c內容。

(2)使用其餘第三方庫

以xlrd庫爲例, xlrd模塊實現對excel文件內容讀取。

import xlrd #打開一個excel文件 xlsx=xlrd.open_workbook('/labcenter/python/pandas/test.xlsx') #讀取sheet清單 sheets=xlsx.sheet_names() sheets #獲取一個sheet數據 sheet1=xlsx.sheets()[0] #獲取指定sheet的名稱 sheet1.name #獲取指定sheet的行數 sheet1.nrows #獲取指定sheet的列數 sheet1.ncols #獲取指定sheet某行的數據 sheet1.row_values(1) #獲取指定sheet某列的數據 sheet1.col_values(1) #獲取指定sheet某單元格的數據 sheet1.row(1)[2].value sheet1.cell_value(1,2) #逐行獲取指定sheet的數據 for i in range(sheet1.nrows): print sheet1.row_values(i)

結果:

[u'Sheet1', u'Sheet2'] u'Sheet1' 6 3 [101.0, 21.0, 22.6] [u'col2', 21.0, 31.0, 41.0, 51.0, 61.0] 22.6 22.6 [u'col1', u'col2', u'col3'] [101.0, 21.0, 22.6] [102.0, 31.0, 31.2] [103.0, 41.0, 32.7] [104.0, 51.0, 28.2] [105.0, 61.0, 18.9]

 

三、從結構化數據庫中讀取

根據數據庫選擇相應的庫,如:mysql數據庫使用MySQLdb庫,oracle數據庫使用cx_Oracle庫,teradata數據庫使用teradata庫,等等。
通常流程:
step1: 創建數據庫鏈接
step2: cursor方法獲取遊標
step3: execute方法執行SQL語句
step4: fetchall方法獲取返回的記錄
step5: close方法關閉遊標
step6: close方法斷開數據庫鏈接
示例:

import MySQLdb
#創建數據庫鏈接 conn = MySQLdb.connect("localhost", "root", "root", "testdb", charset='utf8') #獲取遊標 cursor = conn.cursor() #執行SQL語句 cursor.execute("select * from mytab1;") #獲取返回的記錄 results = cursor.fetchall() #逐行打印 for result in results: print result #關閉遊標 cursor.close() #斷開數據庫鏈接 conn.close()

結果:

(1L, u'aaa') (2L, u'bbb') (3L, u'ccc') (4L, u'ddd') (5L, u'eee')

可經過命令pip install MySql-Python安裝庫MySQLdb。

4.參考與感謝

[1] Python數據分析與數據化運營

相關文章
相關標籤/搜索