Pandas数据分析之数据读写和存储

Pandas数据分析之数据读写和存储



一、文本格式读写

1.Pandas解析函数

函数描述
read_csv从文件、URL、文件型对象中加载带分隔符的数据。默认分隔符为逗号
read_table从文件、URL、文件型对象中加载带分隔符的数据。默认分隔符为制表符(‘\t’)
read_fwf读取特定宽列格式数据(没有分隔符)
read_clipboardread_table的剪贴板版,读取剪贴板中的数据,将网页转换为表格时很有用
read_excel从 Excel的XLS 或XLSX文件中读取表格数据
read_hdf读取 pandas存储的 HDF5 文件
read_html读取 HTML 文档中的所有表格
read_json读取 JSON(JavaScript Object Notation)字符串中的数据
read_msgpackMessagePack二进制格式编码的 pandas 数据
read_pickle读取 Python pickle格式中存储的任意对象
read_sas读取存储于 SAS 系统自定义存储格式的 SAS 数据集
read_sql将SQL查询结果(使用 SQL Alchemy)读取为pandas的 DataFrame
read_stata读取 Stata 文件格式的数据集
read_feather读取 Feather 二进制文件格式

2.Pandas解析函数参数

解析函数的参数主要有5种类型:

  • 索引:将⼀个或多个列当做返回的DataFrame处理,以及是否从⽂件、⽤户获取列名。
  • 类型推断和数据转换:包括⽤户定义值转换和⾃定义的缺失值符号列表等。
  • ⽇期时间解析:包括组合功能,包括分散在多个列中的⽇期时间信息组合成结果中的单个列。
  • 迭代:⽀持对⼤型⽂件分块迭代。
  • 不规整数据问题:跳过⾏、⻚脚、注释或其他次要数据(⽐如由成千上万个逗号隔开的数值数据)。
参数描述
path表示文件系统位置、URL、文件型对象的字符串
sep或delimiter用于分隔每行字段的字符序列或正则表达式
header用作列名的行号。默认为0(第一行),如果没有header行则设置为None
index_col用作行索引的列编号或列名。可以是单个名称/数字或由多个名称/数字组成的列表(分层索引)
names用于结果的列名列表,结合header=None使用
skiprows需要忽略的行数或行号列表,从文件开始处算起(从0开始)
na_values一组用于替换NA的值
comment在行结尾处分隔注释的字符
parse dates尝试将数据解析为datetime,默认为False。如果为True,则尝试解析所有列。可以指定一组列号或列名进行解析。如果列表的元素为列表或元组,就会将多个列组合到一起再进行日期解析工作(例如,日期/时间分别位于两个列中)
keep _date_col如果连接多列解析日期,则保持参与连接的列。默认为False。
converters由列号/列名跟函数之间的映射关系组成的字典。例如{‘foo’: f)会对foo列的所有值应用函数f
dayfirst当解析有歧义的日期时,将其看做国际格式(例如,7/6/2012->June7,2012),默认为False
date_parser用于解析日期的函数
nrows需要读取的行数(从文件开始处算起)
iterator返回一个TextParser以便逐块读取文件
chunksize用于选代的文件块的大小
skip_footer需要忽略的行数(从文件末尾处算起)
verbose打印各种解析器输出信息,比如位于非数值列中缺失值的数量
encoding用于unicode的文本编码格式。例如,"utf-8"表示用UTF-8编码的文本
squeeze如果数据经解析后仅含一列,则返回Series
thousands千分位分隔符,如",“或”."

3.文件读入

(1)HDF5

  • HDF5中的HDF指的是分层数据格式(hierarchical data format)。每个HDF5文件都含有一个文件系统式的节点结构,能够存储多个数据集并支持元数据;支持多种压缩模式的即时压缩,更高效的存储重复模式的数据;适用于处理不合适在内存中存储的超大型数据
  • HDFStore支持两种存储模式,‘fixed’和’table’。后者通常会更慢,但是支持使用特殊语法进行查询操作
frame = pd.DataFrame({'a': np.random.randn(100)})
store = pd.HDFStore('mydata.h5')
store['obj1'] = frame
store['obj1_col'] = frame['a']
print(store['obj1'])
store.put('obj2', frame, format='table')
store.select('obj2', where=['index >= 10 and index <= 15']) #查询,更慢
store.close()
#快捷方法
frame.to_hdf('mydata.h5', 'obj3', format='table')
pd.read_hdf('mydata.h5', 'obj3', where=['index < 5'])

(2)常用函数及应用

df = pd.read_csv('ex1.csv')
df = pd.read_table('ex1.csv', sep=',') #指定分隔符
df = pd.read_table('ex1.csv', sep='\s+') #任意多个空白字符,包括空格、制表符、换页符等
df = pd.read_csv('ex1.csv', header=None) #不包含列名
names = ['a','b','c','d','message']
df = pd.read_csv('ex1.csv', names=names) #指定列名
df = pd.read_csv('ex1.csv', names=names, index_col='message') #指定索引
df = pd.read_csv('ex1.csv', names=names, index_col=['key1', 'key2']) #分层索引
df = pd.read_csv('ex1.csv', names=names, skiprows=[0,2,3]) #跳过指定行
pd.isnull(df) # 判断缺失值
df = pd.read_csv('ex1.csv', na_values=['NULL']) # NA替换值序列
sentinel = {'message':['foo', 'NA'], 'something': ['two']}
pd.read_csv('ex1.csv',	na_values=sentinels) # 每列指定不同缺失值标识


import json
result = json.loads(obj)
asjson = json.dumps(result) # python对象转json
data = pd.read_json('example.json') # 将json转为Series或者DataFrame
data.to_json() # Series或者DataFrame转为JSON


frame = pd.read_csv('examples/ex1.csv')
frame.to_pickle('examples/frame_pickle') #二进制序列化,并写入文件
pd.read_pickle('examples/frame_pickle') # 读取文件


xlsx = pd.ExcelFile('examples/ex1.xlsx') #要读取一个文件中的多个表单,创建ExcelFile会更快
all_sheets = pd.read_excel(file_path, sheet_name=None) #读取所有sheet
for sheet_name, df in all_sheets.items():
	pass
sheets_to_read = ['Sheet1', 'Sheet3'] 
df_sheets = pd.read_excel(file_path, sheet_name=sheets_to_read) # 读取特定sheet,可遍历,同上
pd.read_excel(xlsx, 'Sheet1') #读取指定某个sheet
frame.to_excel('examples/ex2.xlsx') # pandas数据写入excel

4.分块读入

适用于大型数据文件

 pd.options.display.max_rows = 10 # 设置显示行的数目
 pd.read_csv('ex2.csv',nrows=5) # 显示前5列
chunker = pd.read_csv('ex2.csv', chunksize=1000) #指定文件数据块的大小
for item in chunker: # 迭代
	pass

4.数据写入

Series也有to_csv方法

 data.to_csv('out.csv') #默认逗号分隔
 data.to_csv(sys.stdout, sep='|') #打印文本结果,指定分隔符
 data.to_csv(sys.stdout, na_rep='NULL') # 缺少值标注
 data.to_csv(sys.stdout, index=False, header=False) #去掉行列标签
 data.to_csv(sys.stdout, index=False, columns=['a', 'b','c']) #指定子列和顺序

总结

数据分析的第一步,成长的一小步,加油!
注意,文章所有内容均来自于《利用python进行数据分析》原书第二版中文版,如有错误,欢迎指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值