基于pandas对表格型数据的加载和存储操作

基于pandas对表格型数据的读取操作


读写文本格式的数据

pandas(关于pandas的介绍,请看https://blog.****.net/weixin_45640609/article/details/104730070)提供了一些用于将表格型数据读取为DataFrame对象的函数。
这里用表格列举出来

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

虽然有这么多的函数,但是其中read_csv和read_table是我们今后用的最多的。

下面我们来看一下有关于文件读取的例子:

例如,同目录下,这里有一个名为demo1.csv(逗号分隔的文本文件),文本内容如下:
基于pandas对表格型数据的加载和存储操作

  1. 我们先用read_csv的方式来读取该文件

发现,成功读取了文件,并且自动编辑了行号
基于pandas对表格型数据的加载和存储操作

  1. 用read_table的方式读取该文件,sep指定以“,”来分割。

基于pandas对表格型数据的加载和存储操作

接下来我们可以看看读取文件的数据是什么格式的

可以发现,是DataFrame格式的,说明我们可以对该数据进行相关的操作
基于pandas对表格型数据的加载和存储操作

你还可以让pandas分配默认的列名,也可以自己定义列名

默认分配列名:
定义header=None则pandas会自动分配默认的列名
基于pandas对表格型数据的加载和存储操作
自己定义列名:
names参数,就是给自定义列名用的
基于pandas对表格型数据的加载和存储操作
假设你希望将message列做成DataFrame的索引。你可以明确表示要将该列放到索引4的位置上,也可以通过index_col参数定"message":
例如:
基于pandas对表格型数据的加载和存储操作
有些情况下,有些表格可能不是⽤固定的分隔符去分隔字段的(⽐如空⽩符或其它模式)。看看下⾯
这个⽂本⽂件:
基于pandas对表格型数据的加载和存储操作
虽然可以⼿动对数据进⾏规整,这⾥的字段是被数量不同的空⽩字符间隔开的。这种情况下,你可以
传递⼀个正则表达式作为read_table的分隔符。可以⽤正则表达式表达为‘\s+’。

所以,可以这样写("\s+"是匹配空白字符(\n,\r,\t,空格))

基于pandas对表格型数据的加载和存储操作
这⾥,由于列名⽐数据⾏的数量少,所以read_table推断第⼀列应该是DataFrame的索引。

另外,我们可以用skiprows跳过⽂件中不重要的部分
例如,我有这样一个文件
基于pandas对表格型数据的加载和存储操作

第二行和第四行对我们来说,是无关紧要的,可以通过skiprows跳过,python索引从0开始,所以这里写1,3

基于pandas对表格型数据的加载和存储操作
缺失值处理是⽂件解析任务中的⼀个重要组成部分。缺失数据经常是要么没有(空字符串),要么⽤某个标记值表示。默认情况下,pandas会⽤⼀组经常出现的标记值进⾏识别,⽐如NA及NULL:

例如,我有一个demo3文件,内容大致这样
基于pandas对表格型数据的加载和存储操作
这里我用read_csv来读取
基于pandas对表格型数据的加载和存储操作

na_values可以⽤⼀个列表或集合的字符串表示缺失值,字典的各列可以使⽤不同的NA标记值:
就是说可以指定那些数据为“NA”(无效)
基于pandas对表格型数据的加载和存储操作
read_csv和read_table函数的参数

read_csv和read_table函数的参数
参数 说明
path 表示文件系统位置、URL、文件型对象的字符串
sep或delimiter 用于对行中各字段进行拆分的字符序列或正则表达式
header 用作列名的行号。默认为0(第一行),如果没有header行就应该设置为None
index_col 用作行索引的列编号或列名。可以是单个名称/数字或由多个名称/数字组成的列表(层次化索引)
names 用于结果的列名列表,结合header=None
skiprows 需要忽略的行数(从文件开始处算起),或需要跳过的行号列表(从0开始)
na_values 一组用于替换NA的值
comment 用于将注释信息从行尾拆分出去的字符(一个或多个)
parse_dates 尝试将数据解析为日期,默认为False。如果为True,则尝试解析所有列。此外,还可以指定需要解析的一组列号或列名。如果列表的元素为列表或元组,就会将多个列组合到一起再进行日期解析工作(例如,日期/时间分别位于两个列中)
keep_date_col 如果连接多列解析日期,则保持参与连接的列。默认为False。
converters 由列号/列名跟函数之间的映射关系组成的字典。例如,“foo:f)会对foo列的所有值应用函数f
dayfirst 当解析有歧义的日期时,将其看做国际格式(例如,7/6/2012→June7,2012)。默认为False
nrows 需要读取的行数(从文件开始处算起)
iterator 返回一个TextParser以便逐块读取文件
chunksize 文件块的大小(用于迭代)
skip_footer 需要忽略的行数(从文件末尾处算起)
verbose 打印各种解析器输出信息,比如“非数值列中缺失值的数量”等
encoding 用于unicode的文本编码格式。例如,“utf-8”表示用UTF-8编码的文本
squeeze 如果数据经解析后仅含一列,则返回Series

这么多的参数并不一定全都记下来,记住几个常用的就行

逐块读取文本文件

在处理很⼤的⽂件时,或找出⼤⽂件中的参数集以便于后续处理时,你可能只想读取⽂件的⼀⼩部分
或逐块对⽂件进⾏迭代。
在看⼤⽂件之前,我们先设置pandas显示地更紧些:
例如,我们可以使pd.options.display.max_rows = 5展示最大行数为5
基于pandas对表格型数据的加载和存储操作

如果只想读取⼏⾏(避免读取整个文件),通过nrows进⾏指定即可:
基于pandas对表格型数据的加载和存储操作

要逐块读取⽂件,可以指定chunksize(⾏数):

例如:
基于pandas对表格型数据的加载和存储操作

将数据写出到文本格式

数据也可以被输出为分隔符格式的⽂本
利⽤DataFrame的to_csv⽅法,我们可以将数据写到⼀个以逗号分隔的⽂件中:
例如:
基于pandas对表格型数据的加载和存储操作
当然,还可以使⽤其他分隔符
例如:
基于pandas对表格型数据的加载和存储操作
显示结果:
基于pandas对表格型数据的加载和存储操作
Series也有⼀个to_csv⽅法:
基于pandas对表格型数据的加载和存储操作

JSON数据

JSON(JavaScript Object Notation的简称)已经成为通过HTTP请求在Web浏览器和其他应⽤程序之间发送数据的标准格式之⼀。它是⼀种⽐表格型⽂本格式(如CSV)灵活得多的数据格式。

通过json.loads即可将JSON字符串转换成Python形式::
基于pandas对表格型数据的加载和存储操作
** json.dumps则将Python对象转换成JSON格式:**
基于pandas对表格型数据的加载和存储操作
如何将(⼀个或⼀组)JSON对象转换为DataFrame或其他便于分析的数据结构就由你决定了。最简单⽅便的⽅式是:向DataFrame构造器传⼊⼀个字典的列表(就是原先的JSON对象),并选取数据字段的⼦集:
基于pandas对表格型数据的加载和存储操作
pandas.read_json可以⾃动将特别格式的JSON数据集转换为Series或DataFrame。
例如:
我这里有一个json文件,内容大致为
基于pandas对表格型数据的加载和存储操作
这里用read_json函数来读取
基于pandas对表格型数据的加载和存储操作
同样的,也可以用to_json方法将DataFrame保存为json文件
基于pandas对表格型数据的加载和存储操作

读取Microsoft Excel文件

pandas的ExcelFile类或pandas.read_excel函数⽀持读取存储在Excel 2003(或更⾼版本)中的表格型数据。
要使⽤ExcelFile,通过传递xls或xlsx路径创建⼀个实例,存储在表单中的数据可以read_excel读取到DataFrame.
例如:
基于pandas对表格型数据的加载和存储操作

如果要将pandas数据写⼊为Excel格式,你必须⾸先创建⼀个ExcelWriter,然后使⽤pandas对象的
to_excel⽅法将数据写⼊到其中:
基于pandas对表格型数据的加载和存储操作
也可以不使⽤ExcelWriter,⽽是传递⽂件的路径到to_excel:
基于pandas对表格型数据的加载和存储操作

参考书籍:《利用python进行数据分析》