本文主要对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\next等指针操作方法配合实现所有记录的遍历。

#打开文件
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\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及所有以固定分隔符分隔的文本文件。

(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方法

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):数据读取的更多相关文章

  1. 重拾python所要知道的一些主干知识点

    前言:因为有一段时间没有用python了,最近需要用到,只能回头过去看B站视频补一补,因为语言都是相通的,而且一些细节都可以去查表解决,所以呢,我们只需要知道一些python与其他语言的不同和常见的优 ...

  2. 重拾python

    前一段碰到几次关于日期计算的题:给出一个日期,计算下一天的日期.虽然不限语言,可是我就C/C++还算熟悉,别的都是刚了解皮毛,根本不会用现成的库啊,无奈啊...只好用c语言一点点实现了,当时真是无比怀 ...

  3. 重拾Python(3):Pandas之Series对象的使用

    Pandas是Python下最强大的数据分析和探索库,是基于Numpy库构建的,支持类似SQL的结构化数据的增.删.查.改,具有丰富的数据处理函数.Pandas有两大数据结构:Series和DataF ...

  4. python + Excel数据读取(更新)

    data.xlsx 数据如下: import xlrd#1.读取Excel数据# table = xlrd.open_workbook("data.xlsx","r&qu ...

  5. 重拾Python(2):如何安装第三方库(Windows)

    使用python进行数据分析或者数据处理时,往往需要使用一些库,而使用库之前必须安装它.Anaconda内置了很多常用的第三方库,可以满足绝大部分需求,比如numpy.pandas.matplotli ...

  6. 重拾Python(1):使用Anaconda搭建Python开发环境(Windows7)

    1.为什么选择Anaconda? Anaconda解决了Python使用痛点. Python好用但是令人头疼的就是库管理与Python不同版本的问题,特别是Windows环境下. 2.什么是Anaco ...

  7. 重拾Python(4):Pandas之DataFrame对象的使用

    Pandas有两大数据结构:Series和DataFrame,之前已对Series对象进行了介绍(链接),本文主要对DataFrame对象的常用用法进行总结梳理. 约定: import pandas ...

  8. Python: 文件操作与数据读取

    文件及目录操作 python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块,主要用到的几个函数是, import os 返回指定目录下的所有文件和目录名: os.listdir() 重命名: ...

  9. 【原】Learning Spark (Python版) 学习笔记(二)----键值对、数据读取与保存、共享特性

    本来应该上周更新的,结果碰上五一,懒癌发作,就推迟了 = =.以后还是要按时完成任务.废话不多说,第四章-第六章主要讲了三个内容:键值对.数据读取与保存与Spark的两个共享特性(累加器和广播变量). ...

随机推荐

  1. Java注解(3)-注解处理器(编译期|RetentionPolicy.SOURCE)

    注解的处理除了可以在运行时通过反射机制处理外,还可以在编译期进行处理.在编译期处理注解时,会处理到不再产生新的源文件为止,之后再对所有源文件进行编译. Java5中提供了apt工具来进行编译期的注解处 ...

  2. 【Nginx系列】Nginx虚拟主机的配置核日志管理

    Nginx配置段 #user nobody; worker_processes 1;// 有1个工作的子进程,可以自行修改,但太大无益,因为要争夺CPU,一般设置为 CPU数*核数 #error_lo ...

  3. 从PRISM开始学WPF

    我最近打算学习WPF ,在寻找MVVM框架的时候发现了PRISM,在此之前还从一些博客上了解了其他的MVVM框架,比如浅谈WPF中的MVVM框架--MVVMFoundation 中提到的MVVMFou ...

  4. Beta预备会议

    1. 讨论组长是否重选的议题和结论. 我们小组决定组长更换为林洋洋同学,他Web开发经验比较丰富,对任务的分配会更加明确,由于上一阶段中存在进度偏慢的问题,我们希望在Beta阶段通过更好的分工安排来保 ...

  5. 2017-2018-1 1623 bug终结者 冲刺006

    bug终结者 冲刺006 by 20162328 蔡文琛 今日任务:音频素材添加 又是新的一天,小组项目有了很大的起色,已经可以在手机上试玩了. 添加背景音乐能使我们的游戏锦上添花. 音频资源需求 需 ...

  6. const volatile同时限定一个类型int a = 10

    const和volatile放在一起的意义在于: (1)本程序段中不能对a作修改,任何修改都是非法的,或者至少是粗心,编译器应该报错,防止这种粗心: (2)另一个程序段则完全有可能修改,因此编译器最好 ...

  7. 关于Java的异常

    异常机制概述 异常机制是指当程序出现错误后,程序如何处理.具体来说,异常机制提供了程序退出的安全通道.当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器. 异常处理的流程 当程序中抛出 ...

  8. codeforces 830 B Cards Sorting

    B. Cards Sorting  http://codeforces.com/problemset/problem/830/B Vasily has a deck of cards consisti ...

  9. Java如何调取创蓝253短信验证码

    基于创蓝253短信服务平台的Java调用短信接口API package com.bcloud.msg.http; import java.io.ByteArrayOutputStream; impor ...

  10. Java面试题合集(一)

    接下来几篇文章准备系统整理一下有关Java的面试题,分为基础篇,javaweb篇,框架篇,数据库篇,多线程篇,并发篇,算法篇等等,陆续更新中. 其他方面如前端后端等等的面试题也在整理中,都会有的. 所 ...