读写文本格式的数据
pandas提供了一些用于将表格型数据读取为DataFrame对象的函数。
pandas中的解析函数
大致介绍一下这些函数在将文本数据转换为DataFrame时所用到的一些技术。这些函数的选项可以划分为以下几个大类:
索引:将一个或多个列当作返回的DataFrame处理,以及是否从文件,用户获取列名。
类型推断和数据转换:包括用户定义值的转换、缺失值标记列表等。
日期解析:包括组合功能,比如将分散在多个列中的日期时间信息组合成结果中的单个列。
迭代:支持对大文件进行逐块迭代。
不规整数据问题:跳过一些行、页脚、注释或其他一些不重要的东西(比如由成千上万个逗号隔开的数值数据)。
类型推断是这些函数中最重要的功能之一,我们不需要指定列的类型到底是数值、整数、布尔值,还是字符串。首先看一个以逗号分隔(CSV)文本文件:
使用read_csv将其读入一个DataFrame:
也可以用 ,只不过要指定分隔符而已:
并不是所有文件都有标题行,看下面这个文件:
读入该文件的办法有两个。可以让pandas为其分配默认的列名,也可以自己定义列名:
假设你希望将message列做成DataFrame的索引,可以如下设置:
如果希望将多个列做成一个层次化索引,只需传入有列编号或列名组成的列表即可:
有些表格可能不是用固定的分隔符去分隔字段的(比如空白符或其他模式)。对于这种情况,可以编写一个正则表达式作为read_table的分隔符。
这些解析器函数还有许多参数可以帮助你处理各种各样的异形文件格式。比如,可以用skiprows跳过文件的第一行、第三行和第四行:
缺失值处理是文件解析任务中的一个重要组成部分。缺失数据经常是要么没有(空字符串),要么用某个标记值表示。默认情况下,pandas会用一组经常出现的标记值进行识别,如NA、-1.#IND以及NULL等:
na_values可以接受一组用于表示缺失值的字符串:
可以用一个字典为各列指定不同的NA标记值:
/ 函数的参数
逐块读取文本文件
在处理很大的文件时,或找出大文件中的参数集以便于后续处理时,你可能只想读取文件中的一小部分或逐块对文件进行迭代。
如果只想读取几行(避免读取整个文件),可以用nrows指定:
需逐块读取文件,需要设置chunksize(行数):
read_csv所返回的这个TextParser对象使你可以根据chunksize对文件进行逐块迭代。比如说,我们可以迭代处理ex6.csv,将值计数聚合到“key”列中,如下:
TextParser还有一个get_chunk方法,它使你可以读取任何大小的块。
将数据写出到文本格式
利用DataFrame的to_csv方法,我们可以将数据写到一个以逗号分隔的文件中:
当然,还可以使用其他分隔符:
缺失值在输出结果中会被表示为空字符串。你可能希望将其表示为别的标记值:
如果没有设置其他选项,则会写出行和列的标签。也可以被禁用:
此外,你还可以只写出一部分的列,并以你指定的顺序排列:
Series也有一个to_csv方法:
虽然只需一点整理工作(无header行,第一列作索引)就能用read_csv将CSV文件读取为Series,但还有一个更为方便的 方法:
手工处理分隔符格式
大部分表格型数据都能用pandas.read_table进行加载。然而,有时还是需要做一些手工处理,因为接收到含有畸形行的文件而使 出问题的情况并不少见。如下:
对于任何单字符分隔符文件,可以直接使用Python内置的csv模块。将任意已打开的文件或文件型的对象传给csv.reader:
为了使格式合乎要求,要对其做些整理工作:
JSON数据
JSON已经成为通过HTTP请求在Web浏览器和其他应用程序之间发送数据的标准格式之一。
使用Python标准库中的json,通过json.loads即可将JSON字符串转换成Python形式,用json.dumps则将Python对象转换成JSON格式。
使用数据库
在许多应用中,数据很少取自文本文件,因为这种方式存储大量数据很低效,基于SQL的关系型数据库和一些非SQL型数据库使用非常广泛。
将数据从SQL加载到DataFrame的过程很简单,pandas还有一些能简化该过程的函数。我们使用嵌入式的SQLite数据库:
然后插入几行数据:
从表中选取数据时,大部分Python SQL驱动器都会返回一个元组列表:
你可以将这个元组列表传给DataFrame构造器,但还需要列名(位于光标的description属性中):
这种数据规整操作相当多,你肯定不想每查一次数据库就重写一次。SQLAlchemy项目是一个流行的Python SQL工具,它抽象出了SQL数据库中的许多常见差异。pandas有一个read_sql函数,可以让你轻松的从SQLAlchemy连接读取数据。这里,我们用SQLAlchemy连接SQLite数据库,并从之前创建的表读取数据:(引自:简书作者SeanCheney 链接:https://www.jianshu.com/p/047d8c1c7e14)
以上。
领取专属 10元无门槛券
私享最新 技术干货