文本文件读取
pd.read_csv(…)
详细记录pandas读取表格型数据文件的方法:pd.read_csv()
其实pytohn内置了一个可以处理简单规整csv文件的模块:
import csv
给csv.reader()
传入文件型对象即可
什么?你不知道什么是文件型对象?open(fp,'r')
返回的就是文件型对象
重要参数解析:
path: 这个参数不解释,可以是本地路径,也可以是URL
sep: 行内字段(列)分隔符,csv文件默认为逗号,还可以为正则表达式
header: 标识列名的行号。默认为0,代表文件第一行是列名,没有列名时需要设为None
//当header=None时:
names: 字符串组成的列表,指定列名
index_col: 标识行索引
简单行索引:列编号(整数)或者列名(字符串)
层次化索引:列编号/列名zucheng的列表
什么是层次化索引?将多个列作为索引,列之间将产生层次关系
a a1
a2
b b1
b2
b3
...
skiprows: 如果传入整数,表示需要从文件开始出算起需要忽略的行数
如果传入整数列表,表示需要跳过的行号列表(从0开始)
skip_footer: 整型,从文件末尾算起需要忽略的行数
nrows: 整型,需要读取的行数(从开始算起)
na_value: 用于替换NaN的值
comment: 当行末有注释信息时指定注释信息标志字符
parse_dates: 尝试将数据解析为日期,默认为False
传入True:尝试将所有列都解析为日期(一般是行不通的)
传入列号/列名的列表:仅尝试将指定的(一些)列解析为日期
传入上一行列表的列表:尝试将多个列进行组合后进行解析(当日期不同部分分散在不同的列中时)
keep_date_col: 当组合多列解析时是否保留原始列,默认为False
dayfirst: 当日期出现歧义时(如7/6/2018究竟是6月还是7月?)指定day的位置,默认为False
date_parser: 或者传入一个用于解析日期的函数
converters: 列值预处理,传入一个字典d={列号/列名: 函数, ...},表示对相应地列的值将执行相应地函数
iterator: 用于逐块读取文件
chunksize: 文件块的大小
verbose: 是否打印日志
encoding: 文本编码格式
squeeze: 数据经过解析后只剩下一列,返回Series而不是DataFrame
thousands: 千分位分隔符
逐块读取
当文件特别大时我门可能只是想读取文件的一小部分或者逐块迭代
- 如果我们只是想读文件开始几行,使用关键字参数
nrows
。(Q: 那中间几行呢?) - 逐块迭代:
read_csgv
指定chunksize
后将返回一个TextParser用于后续迭代
Q: 按固定字符数读取?If so, 貌似只适用于行字符数相同的文件?
XML文件读取
略
二进制文件读取
pickle序列化
首先得了解python内置的pickle序列化
保存pandas对象到磁盘:PD_OBJ.save(FILE_NAME)
从磁盘取回pandas对象:PD_OBJ.load(FILE_NAME)
HDF5格式
高效读写磁盘上以二进制形式存储的科学数据
HDF: Hierarchical Data Format
高效分块读写
python中有两个接口:PyTables + h5py
pandas建立HDFStore类,通过PyTables存储对象
存储
HDFStore类类似于字典,创建HDFStore对象后按照字典方式赋值即可。
//<class 'pandas.io.pytables.HDFStore'>
store = pd.HDFStore(OUTPUT_FILE)
store['obj1'] = dataframe
store['obj1_col'] = dataframe['a']
对于IO密集型数据(而非CPU密集型数据),使用HDF5能够大大提升效率
Excel格式
panda中相关的类:ExcelFile
依赖包:xlrd, openpyxl
创建实例:xls_file = pd.ExcelFile(XLS_FILE)
读取数据:table = xls_file.parse('Sheet1')