一、读写文本格式数据:
基本的文件读取:
pandas提供了一些用于将表格型数据读取为DataFrame对象的函数,其中用的最多的就是read_csv()函数和read_table()函数,具体的如下表所示:
将数据文本转换为DataFrame时需要考虑的方面:
索引:当将一个或多个列当做返回的DataFrame处理时,是否要从文件、用户获取列名;
类型推断和数据转换:包括用户定义值的转换、缺失值标记列表等;
日期解析:包括组合功能,比如将分散在多个列中的日期时间信息组合成结果中的单个列;
迭代:支持对大文件进行逐块迭代;
不规整数据问题:跳过一些行、页脚、注释或其他一些不重要的东西;
通过read_csv()函数和read_table()函数的参数的设置,我们就可以完成以上的大部分功能,具体的参数设置如下图所示:
下面我们结合几个例子来看read_csv函数和read_table函数的用法:
例1:读取一个以逗号分隔的csv文本文件:read_csv()可以直接读取,read_table()要指定分隔符:
import pandas as pd
import numpy as np
df = pd.read_csv('ch06/ex1.csv')
df1 = pd.read_table('ch06/ex1.csv',sep=',')
例2:为DataFrame设置列名,通过read_csv()函数的name参数来设置自定义的列名;若将header参数设置为None,则会采用默认的列名:
首先我们先查看文本文件ex2.csv:
我们既可以让pandas为其默认分配列名,也可以自己定义列名:
df = pd.read_csv('ch06/ex2.csv',header=None)
df = pd.read_csv('ch06/ex2.csv',names=['a','b','c','d','message'])
例3:设置某一列或某几列作为DataFrame的索引,通过设置index_col参数可以完成这个操作:
names = ['a','b','c','d','message']
df = pd.read_csv('ch06/ex2.csv', names=names, index_col='message')
parsed = pd.read_csv('ch06/csv_mindex.csv', index_col=['key1','key2'])
例4:有些表格不是以固定的分割符去分割字段的,对于这种情况,需要编写一个正则表达式作为read_table的分隔符:
我们由这么一个文件,各个字段由数量不定的空白符分隔,具体如下图所示:
对于这个情况,我们可以使用正则表达式\s+表示,并且read_table()的sep参数设置为该正则表达式,于是我们就有:
result = pd.read_table('ch06/ex3.txt', sep='\s+')
例5:有时候在处理csv文件的时候,需要跳过某几行(跳过文件头),可以通过skiprows参数的设置来做到,在这个例子中我们跳过文件的第一行、第三行和第四行: