第6章 序列类型操作
Python中应用最广泛的数据类型是序列,包括元组(tuple)、列表(list)、Range以及文本序列(字符串),其中列表属于可变数据类型,其他几种属于不可变数据类型。
字符串和Range类型在前面已经做过介绍,本章主要学习元组和列表的概念及其应用方法。详细讲授列表的创建、更新、删除、排序的方法,通过实例讲解列表的赋值与复制、列表推导式、列表的嵌套的概念与应用。简单介绍在序列操作中广泛应用的map()、zip()和enumerate()等内置函数的概念与应用。通过实例讲解利用pandas库读取Excel文件、文本文件和数据库中的数据并将数据转为列表类型,以及利用本章所学知识进行进一步处理的方法。
【本章要点】
●元组的概念与应用
tuple([iterable])
使用一对圆括号来表示空元组: ()
使用一个后缀的逗号来表示单元组: a, 或 (a,)
使用以逗号分隔的多个项: a, b, c or (a, b, c)
使用内置的 tuple(): tuple() 或 tuple(iterable)
请注意决定生成元组的其实是逗号而不是圆括号, 圆括号只是可选的
●列表的定义
list([iterable])
●列表的创建、更新和删除
可以用多种方式构建列表:
使用一对方括号来表示空列表: []
使用方括号,其中的项以逗号分隔: [a], [a, b, c]
使用列表推导式: [x for x in iterable]
使用类型的构造器: list() 或 list(iterable)
●列表的排序
ls.sort(*, key=None, reverse=False)
此方法会对列表进行原地排序,只使用 < 来进行各项间比较
key 指定带有一个参数的函数,用于从每个列表元素中提取比较键
reverse 为一个布尔值。 如果设为 True,则每个列表元素将按反向顺序比较进行排序
sorted(iterable)
●列表推导式
[表达式 for x in list]
●内置函数map()、zip()和enumerate()
enumerate(iterable, start=0)返回一个枚举对象。iterable 必须是一个序列,或 iterator,或其他支持迭代的对象
map(function, iterable, ...)返回一个将 function 应用于 iterable 中每一项并输出其结果的迭代器
zip(*iterables, strict=False)在多个迭代器上并行迭代,从每个迭代器返回一个数据项组成元组
●Excel文件中的数据转列表
pd.read_excel(io, sheet_name=0, header=0, names=None,
usecols=None, squeeze=False, converters=None,
skiprows=None, nrows=None, skipfooter=0)
1.io:Excel的存储路径和文件名
2.sheet_name:要读取的工作表名称,默认读取第一个工作表
3.header:用哪一行作列名,默认为0
4.names:自定义最终的列名,names的长度必须和Excel列长度一致
5.index_col:用作索引的列
6.usecols:需要读取哪些列。可以用整型 [0,2,3];列名如“A:C,E” = “A, B, C, E”,
7.squeeze:当数据仅包含一列且squeeze为True时,返回Series,反之返回DataFrame。
8.converters:强制规定列数据类型,主要用途是保留以文本形式存储的数字。
pandas默认将文本类的数据读取为整型,converters 参数可以指定各列数据的类型,如converters = {'出货量':float,'月份':str }, 将“出货量”列数据类型规定为浮点数,“月份”列规定为字符串类型。
9.skiprows:跳过特定行。skiprows= n 跳过前n行;skiprows = [a, b, c] 跳过第a+1,b+1,c+1行
10.nrows:需要读取的行数,nrows= n 读取前n行。
11. skipfooter: 跳过末尾行数,skipfooter = n 跳过末尾的n行
import pandas as pd
data = pd.read_excel('6.6stock.xlsx') # 读取数据为dataframe类型
title = data.columns.tolist() # dataframe中标题转为列表类型
stock_lst = data.values.tolist() # dataframe中数据转为列表类型
print('输出列表类型的数据:\n', [title] + stock_lst) # 输出列表类型数据●文本文件中的数据转列表
pd.read_csv(filepath_or_buffer, sep='\t', delimiter=None,
header='infer', names=None, engine=None,
encoding=None)
1. filepath_or_buffer:带路径文件名或URL,字符串类型
2. sep:分隔符,缺省值为'\t',当文本中的分隔符不是制表符时,可用sep=’分隔符’来指定
3.delimiter:参数sep的替代参数,缺省值为None。
4.header:整型或整型列表,用作列名的行号和数据的开头。
5.names:要使用的列名的列表,如果文件不包含标题行,则应显式传递header= None
6.engine:解析器引擎,值为'c'或'python'。c引擎速度更快,Python引擎功能更加完善
7.encoding:默认None,编码在读/写时用UTF(例如'utf-8')
import pandas as pd
score = pd.read_csv(filename) # 读取数据为dataframe类型
title = score.columns.tolist() # dataframe中标题转为列表类型
score_lst = score.values.tolist() # dataframe数据转为列表类型
●数据库中的数据转列表
from sqlalchemy import *
import pandas as pd
# 定义元信息,绑定到引擎,test.db为数据库名,./表示当前路径。
engine = create_engine('sqlite:///./test.db', echo=True)
metadata = MetaData(engine) # 绑定元信息
pd.read_sql(sql, engine, index_col=None, coerce_float=True,
params=None, parse_dates=None, columns=None,
chunksize=None)
●文件中数据的读取与分析

本章课件