导图社区 数据载入、存储及文件格式(数据分析pandas)
这个是第三篇关于pandas的读书笔记,如果有错误要指正呀!
编辑于2020-01-13 08:15:15数据载入、存储及文件格式
文本格式数据的读写
准备
常用函数
read_csv()
read_table()
主要参数类型
索引
可以将一或多个列作为返回的DataFrame,从文件或用户处获得列名,或者没有列名
类型推断与数据转换
包括用户自定义的值转换和自定义的缺失值符号列表
日期时间分析
包括组合功能,也包括将分散在多个列上的日期和时间信息组合成结果中的单个列
迭代
支持对大型文件的分块迭代
未清洗数据问题
跳过行、页脚、注释以及其他次要数据,比如使用逗号分隔千位的数字
read_csv()与read_table()的常用参数
path
表明文件系统位置的字符串、URL、文件型对象
sep/delimiter
用于分隔每行字段的字符序列或正则表达式
header
用作列名的行号,默认是0(第一行),如果没有列名的话应该为None
index_col
用作结果中行索引的列号或列名,可以是一个单一的名称/数字,也可以是一个分层索引
names
结果的列名列表,和hender=None一起使用
skiprows
从文件开头处起,需要跳过的行数或者行号列表
na_values
需要NA替换的值序列
comment
在行结尾处分隔注释的字符
parse_dates
尝试将数据解析为datetime,默认是False.如果为True,将尝试解析所有列。也可以指定列号或者列名列表来进行解析。如果列表的元素是元组或者列表,将会把多个列组合在一起进行解析(例如日期/时间将拆分为两列)
keep_date_col
如果连接到解析日期上,保留被连接的列,默认不开
converters
包含列名称映射到函数的字典(例如{'foo':f}会把函数f应用到foo列
dayfirst
解析非明确日期时,按照国际格式处理(例如7/6/2010->June 7,2010),默认是False
date_parser
用于解析日期函数
nrows
从文件开头处读取的行数
iterator
返回一个TexParser对象,用于零散地读入文件
chunksize
用于迭代的块大小
skip_footer
忽略文件尾部行数
verbose
打印各种解析器输出的信息,比如位于非数值序列中缺失值的数量
encoding
Unicode文本编码
squeeze
如果解析数据只包含一列,返回一个Series
thousands
千位分隔符(例如‘,’或‘.')
分块读入文本文件
pandas显示设置
pandas.options.display.max_rows
只想读取前几行
显式注明nrows参数
对于过大文件要分块读入
传入chunksize参数数值
结果是TextParser对象,允许根据这个东西遍历chunker对象
对于TextParser对象还有get_chunk方法,允许按照任意大小读取数据块
将数据写入文本格式
DataFrame
to_csv方法
读取以逗号分隔的文件
修该sys.stdout来修改控制台输出
修改数据分隔符
frame.to_csv(sys.stdout,sep='|')
修改缺失值的默认标识
frame.to_csv(sys.stdout,na_rep='NULL')
禁止行或列的标签写入
frame.to_csv(sys.stdout,index=False,columns=False)
Series
具体方法和DataFrame中差不多,不过记得显式传入header参数并赋值False
使用分隔格式
概念:
因为有的时候文件的分隔不是默认的逗号,手动再一次操作不可避免,所以借用python内置csv模块来帮忙处理简单文件
方法:
csv.reader()
在读取文件之后,先列表化,再应用字典推导式以及zip方法可以得到直接传入DataFrame的字典
csv.Dialect
内部常见属性(也可直接作为csv.reader()的参数)
delimiter
一个用于分隔字段的字符,默认是','
lineterminator
行终止符,默认'\r\n’读取器忽略行终止符并识别跨平台终止符
quotechar
用在含有特殊字符字段中的引导,默认是'"'
quoting
引用惯例,选项包括csv.QUOTE_ALL(引用所有的字段),csv.QUOTE_MINIMAL(只使用特殊字符,如分隔符),csv.QUOTE_NONNUMERTC和csv.QUOTE_NONE(不引用).
skipinitialspace
忽略每个分隔符后的空白,默认是False
doublequote
如何让处理字段内部的引号。如果为True,则是双引号
escapechar
当引用设置为csv.QUOTE_NONE时用于转义分隔符的字符串,默认是禁用的
csv.writer()
csv.writer().writerow()
注意:
对于具有更复杂或固定的多字符分隔符的文件,内置csv也无能为力,必须要用字符串的split或者正则表达式的re.split进行行拆分和其他清理工作。
JSON数据
概念:
JSON已经成为Web浏览器和其他应用间通过HTTP请求发送数据的标准格式。非常接近有效的Python代码除了它的空值null和一些其他的细微差别(例如不允许列表末尾的逗号)之外基本类型是对象(字典)、数组(列表)、字符串、数字、布尔值、空值。对象中的所有键必须是字符串。
注意:
对象中所有键一定是字符串类型
在转为json数据之前的字符串阶段,一定要用双引号
不允许列表末尾的逗号(就是最后一项后面不允许有逗号)
方法
转为JSON
json.loads(obj)
由JSON转为字符串
json.dumps()
转为Series或DataFrame
pandas.read_json()
由Series或DataFrame转为JSON
pandas.to_json()
XML和HTML数据抓取
二进制格式
pickle格式
读取
pandas.read_pickle()
写入
pandas.to_pickle()
HDF5格式
概念:
用于存储大量的科学数组数据。HDF代表分层数据格式。每个HDF5文件可以存储多个数据集并且支持元数据。HDF5支持多种压缩模式的即时压缩,使得重复模式的数据得以更高效的存储。HDF5适用于处理不适合在内存中存储的超大型数据,可以使你高效的读写大型数组的一小块。
HDFStore类
概念:
像字典一样工作并处理低级别细节
用法:
store = pandas.HDFStore('filename.h5')
存储模式:
fixed
table
特殊语法的查询操作
store.put('name',frame,format='table/fixed') format是存储方式
这个方法就是store['name']=frame的显式版本,但是允许我们设置其他选项,如存储格式。
store.select('name',where=) where是查询方法
pandas内置快捷方法:
写
frame.to_hdf('hdf_name','piece_name',format='table/fixed')
读
pandas.read_hdf('hdf_name','piece_name',where=ways
读取Microsoft Excel文件
方法内置外部包:
xlrd
openpyxl
使用方法:
生成实例对象
读
xlsx = pandas.ExcelFile('path') pandas.read_excel(xlsx,'Sheet_number')
写
writer = pandas.ExcelWriter('path') pandas.to_excel(writer,'Sheet_number') writer.save()
不生成实例对象
读
frame = pandas.read_excel('path','Sheet_number')
写
frame.to_excel('path',)
与数据库交互
模块
sqlites
sqlalchemy
内置读取方法(sqlalchemy的)
数据库实例对象名 = sqlalchemy.create_engine('sqlite:///数据库名.sqlite'
pandas.read_sql('select * from test',数据库实例对象名)
sqlites交互方法
详见pycharm
Web API交互
模块
requests
交互方法
详见pycharm