机器学习基础~02.数据读取

摘要

要进行机器学习,首先要获取数据,本文将讲述从各种数据源中获取数据的过程。

第 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数据

问题

数据保存在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数据

问题

数据是excel表格格式的,应该如何读取?

3.1 使用read_excel读取数据

读写xls格式文件需要安装xlrdxlwt库,安装方法:

1
pip install xlrd xlwt

读写xlsx格式文件需要安装openpyxl库,安装方法:

1
pip install 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)