日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

又见Python<5>:结构化数据的读取

發布時間:2023/12/19 综合教程 32 生活家
生活随笔 收集整理的這篇文章主要介紹了 又见Python<5>:结构化数据的读取 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

約定:

import numpy as np
import pandas as pd

1、從文本文件中讀取

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

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

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

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

結果:

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
ext等指針操作方法配合實現所有記錄的遍歷。

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

結果:

col1    col2    col3
str

readlines方法:讀取全部數據,結構為一個列表(一行為列表中的一個元素)

#打開文件
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
', '101 20  0.68
', '102 30  0.79
', '103 50  0.72
', '104 60  0.64
', '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. 支持文件范圍:
txtcsv sv及所有以固定分隔符分隔的文本文件。

(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方法
讀取簡單的文本文件和二進制文件,該文件通?;贜umpy的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方法

2、從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]

##3、從結構化數據庫中讀取
根據數據庫選擇相應的庫,如: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數據分析與數據化運營

總結

以上是生活随笔為你收集整理的又见Python<5>:结构化数据的读取的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。