摘要
要进行机器学习,首先要获取数据,本文将讲述从各种数据源中获取数据的过程。
第 1 节 读取txt文本数据
问题
二维数据保存在txt文本文件中,每一行为一条数据,数据的字段以分隔符/$/分隔,应该如何读取?
1.1 自定义函数读取
可以自定义函数读取txt文件,方法如下:
1
2
3
4
5
6
|
def read_txt(path,separate):
with open(path, 'rt', encoding = 'UTF-8-sig') as f:
lines = f.readlines()
return [line.replace('\n','').split(separate) for line in lines]
df = read_txt('data.txt','/$/')
|
1.2 使用 read_table 读取数据
可以使用方法read_table进行读取,该方法在旧版本的pandas中被使用,新版本中被 read_csv 替代,
参数sep长度超过1个字符将被解释为正则表达式,也会强制使用Python解析引擎。
1
2
3
|
import pandas as pd
df = pd.read_table('data.txt', sep='/\$/', names = ['id', 'f1', 'f2', 'f3', 'f4'],engine='python')
|
第 2 节 读取csv数据
2.1 使用 read_csv 读取数据
read_csv是读取csv文件的常用方法,使用方法如下:
1
2
3
4
5
6
7
8
|
# 利用read_csv函数,打开指定路径的文件
df1 = pd.read_csv('data.csv')
# names 属性用来重定义列名
df2 = pd.read_csv('data.csv', names = ['id', 'f1', 'f2', 'f3', 'f4'])
# index_col 属性用来指定哪一列作为索引列
df3 = pd.read_csv('data.csv', index_col = 'id')
# skiprows 属性可以指定读取文件时需要跳过哪些行
df4 = pd.read_csv('data.csv', skiprows = [1,3])
|
第 3 节 读取excel数据
3.1 使用read_excel读取数据
读写xls格式文件需要安装xlrd和xlwt库,安装方法:
读写xlsx格式文件需要安装openpyxl库,安装方法:
read_excel是读取excel表格文件的常用方法,使用方法如下:
1
2
3
4
5
6
7
8
9
|
df = pd.read_excel('data.xlsx')
# 读取第一个工作表(默认)
df = pd.read_excel('data.xlsx', sheet_name=0)
# 读取名为"Sales"的工作表
df = pd.read_excel('data.xlsx', sheet_name='Sales')
# 第 3 行为表头(跳过前两行)
df = pd.read_excel('data.xlsx', header=2)
# 跳过第1, 3, 5行(0-based)
df = pd.read_excel('data.xlsx', skiprows=[0, 2, 4])
|
第 4 节 读取数据库数据
4.1 通过 pandas 调用 sqlalchemy 连接数据库
使用 pandas调用sqlalchemy连接数据库读取数据更加简洁迅速,方法如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
import pandas as pd
from sqlalchemy import create_engine
# SQLite 连接示例(使用文件路径):
# engine = create_engine('sqlite:///example.db')
# MySQL 连接示例:
# engine = create_engine('mysql://username:password@localhost/dbname')
# PostgreSQL 连接示例:
# engine = create_engine('postgresql://username:password@localhost/dbname')
# SQL Server 连接示例:
# engine = create_engine('mssql+pyodbc://username:password@server/dbname')
# Oracle 连接示例(需要 cx_Oracle 库):
# engine = create_engine('oracle+cx_oracle://username:password@hostname:port/service_name')
# 创建 SQLAlchemy Engine
engine = create_engine('sqlite:///example.db')
# 使用 pandas 的 read_sql() 函数读取数据并创建数据帧
query = "SELECT * FROM users"
df = pd.read_sql(query, engine)
|