Pandas 是一个基于 Numpy 库开发的更高级的结构化数据分析工具, 提供了 Series,DataFrame,Panel 等数据结构, 可以很方便地对序列, 截面数据(二维表), 面板数据进行处理.
本文转载自微信公众号「大数据 DT」, 作者张秋剑 张浩 等. 转载本文请联系大数据 DT 公众号.
DataFrame 是我们常见的二维数据表, 包含多个变量 (列) 和样本(行), 通常被称为数据框.
Series 是一个一维结构的序列, 包含指定的索引信息, 可以被视作 DataFrame 中的一列或一行. 其操作方法与 DataFrame 十分相似.
Panel 是包含序列及截面信息的三维结构, 通常被称为面板数据.
我们可通过限定时间 ID 和样本 ID 获得对应的 Series 和 DataFrame.
由于这些对象的常用操作方法十分相似, 因此本文主要使用 DataFrame 进行演示.
1 读取文件
Pandas 库提供了便捷读取本地结构化数据的方法. 这里主要以 CSV 数据为例, read_csv 函数可以读取 CSV 数据, 代码如下:
- import pandas as pd
- CSV = pd.read_csv('data/sample.csv')
- CSV
- id name scores
0 1 小明 78.0
1 2 小红 87.0
2 3 小白 99.0
3 4 小青 99999.0
4 5 小兰 NaN
按照惯例, Pandas 会以 pd 为别名, 以 read_csv 函数读取指定路径下的文件, 然后返回一个 DataFrame 对象. 如果在命令行中打印 DataFrame 对象, 可读性可能会略差一些; 如果在 Jupyter Notebook 中打印的话, 可读性会大幅提升.
打印出来的 DataFrame 包含索引 (第一列), 列名(第一行) 及数据内容(除第一行和第一列之外的部分).
此外, read_csv 函数有很多参数可以设置, 如下所示.
filepath_or_buffer CSV 文件的路径
sep = ',' 分隔符, 默认为逗号
header = 0 int 类型, 0 代表第一行为列名, 若设定为 None 将使用数值列名
names = [] list, 重新定义列名, 默认为 None
usecols = [] list, 定义读取的列, 设定后将缩短读取数据的时间, 并减小内存消耗, 适合读取大量数据, 默认为 None
dtype = {} dict, 定义读取列的数据类型, 默认为 None
nrows = None int 类型, 指定读取数据的前 n 行, 默认为 None
na_values = ... str 类型, list 或 dict, 指定缺失值的填充值
na_filter = True bool 类型, 自动发现数据中的缺失值, 默认值为 True, 若确定数据无缺失, 可以设定值为 False, 以提高数据载入的速度
chunksize = 1000 int 类型, 分块读取, 当数据量较大时, 可以设定分块读取的行数, 默认为 None
encoding = 'utf-8' str 类型, 数据的编码, Python3 默认编码为 UTF-8,Python2 默认编码为 ASCII
Pandas 除了可以直接读取 CSV,Excel,JSON,html 等文件生成的 DataFrame, 也可以在列表, 元组, 字典等数据结构中创建 DataFrame.
2 读取指定行和指定列
使用参数 usecol 和 nrows 读取指定的列和前 n 行, 这样可以加快数据读取速度. 读取原数据的两列, 两行示例如下.
- CSV = pd.read_csv('data/sample.csv',\
- usecols=['id','name'],\
- nrows=2) #读取'id'和'name'两列, 仅读取前两行
- CSV
- id name
0 1 小明
1 2 小红
3 分块读取
参数 chunksize 可以指定分块读取的行数, 并返回一个可迭代对象. 这里, big.CSV 是一个 4500 行, 4 列的 CSV 数据, 设定 chunksize=900, 分 5 块读取数据, 每块 900 行, 4 个变量, 如下所示:
- csvs = pd.read_csv('data/big.csv',chunksize=900)
- for i in csvs:
- print (i.shape)
- (900, 4)
- (900, 4)
- (900, 4)
- (900, 4)
- (900, 4)
可以使用 pd.concat 函数读取全部数据:
- csvs = pd.read_csv('data/big.csv',chunksize=900)
- dat = pd.concat(csvs,ignore_index=True)
- dat.shape
- (4500, 4)
4 将不合理数据读取为缺失值
在数据 sample.CSV 中,"小青" 的分数中有的取值为 99999, 这里令其读取为缺失值, 操作如下:
- CSV = pd.read_csv('data/sample.csv',
- na_values='99999')
- CSV
- id name scores
0 1 小明 78.0
1 2 小红 87.0
2 3 小白 99.0
3 4 小青 NaN
4 5 小兰 NaN
5 以指定编码方式读取
读取数据时, 乱码情况经常出现. 这里需要先弄清楚原始数据的编码形式, 再以指定的编码形式读取, 例如 sample.CSV 编码为 UTF-8, 这里以指定编码 (参数 encoding) 方式读取.
- CSV = pd.read_csv('data/sample.csv',
- encoding='utf-8')
- CSV
- id name scores
0 1 小明 78.0
1 2 小红 87.0
2 3 小白 99.0
3 4 小青 99999.0
4 5 小兰 NaN
关于作者: 张秋剑, 就职于腾讯云金融拓展中心, 从事微信财富营销管理, 数据中台, AI 应用等解决方案拓展工作, 研究方向包括数字化转型, 创新实践等.
张浩, 曾任腾讯云金融首席架构师和星环科技金融行业技术总监, 主要从事大数据, 人工智能, 云计算, 区块链, 联邦学习等相关技术研发与产品设计, 具有丰富的企业架构设计, 企业数字化战略转型运营与业务咨询经验.
周大川, 就职于某中央金融企业金融科技研发中心, 主要从事企业级数据平台开发, 核心业务平台建设, AI 赋能金融科技创新等工作, 具有丰富的新一代金融业务系统建设经验.
常国珍, 曾任毕马威咨询大数据总监, 具有近 20 年数据挖掘, 精益数据治理, 数字化运营咨询经验, 是金融信用风险, 反欺诈和反洗钱算法领域的专家.
本文摘编自《金融商业数据分析: 基于 Python 和 SAS》, 经出版方授权发布.(ISBN:9787111695837)
来源: http://bigdata.51cto.com/art/202112/697229.htm