上一期对于pandas的数据结构以及基本的增查删改进行了简单的介绍,这一期接着利用pandas进行读写文件。
1.读取文件
利用pandas读取文件主要用到的函数是read_xx(),读取后数据结构为dataframe,接下来对read_xx()进行一一讲解。
1.1 excel文件
pd.read_excel()可以用来读取excel文件,主要涉及到的参数有:
(1)sheet_name: excel文件中的表名
(2)index_col: 使用哪一列作为行索引,默认从0开始
(4)usecols: 读取表格中哪几列,必须是位置索引
(5)header: 哪一行设置为列索引,默认是第一行,即header = 0
(6)date_parser:解析日期的函数
(7)parse_dates:尝试将数据解析为日期,默认为False。如果为True,则尝试解析所有列。此外,还可以指定需要解析的一组列号或者列名
(8)names: 列索引
(9)engine: 默认是C,如文件路径存在中文时,engine= "python"
(10)encoding: 默认是utf-8,还可以是gbk
(11)skiprows: 跳过前几行读取文件,默认从0开始
(12)nrows: 读取多少行数据
(13) converters: 列名跟函数之间的映射关系组成的字典
import
sheet_name用来指定读取文件中哪个表格,可以是表格的名字或者是表格所在的位置,默认从0开始;
index_col指定用哪一列作为行索引,可以是具体的列名,也可以是列的位置索引,默认从0开始;
nrows就不用多说了,只读取多少行,为了方便查看数据的结构,示例只读取5行。
df
usecols指定读取列,须是列的位置索引,默认从0开始;
header指定哪一行设置为列索引,默认为0,还可以是1或者None;
#以header = 0,以第一行为列索引
header = None,表明不以表格的行为列索引,即没有表头,默认从0开始,如原来表格有列索引,则原来索引变为第一行数据;
df
列名的设置,可以通过header = None搭配names参数来重设,或者header = None搭配df.columns()来设置;
skiprows,跳过前几行读取;
df
因为原来的表格有表头,因此用header = None时,原来的表头会变成第一行数据,因此使用skiprows =1,跳过了第一行的读取。
df
1.2 csv文件
csv文件是以逗号为分隔符的文件,读取参数与excel基本类似,与excel的读取不一样的地方在于如遇到中文路径必须得设置engine参数;
文件为gbk格式的csv,若不设置encoding参数,会报错,并且文件路径带有中文,需要设置engine参数,不然也会报错;
df
encoding默认是utf-8格式,根据需要还可能是gbk,示例就是gbk格式;
engine指定读取引擎,默认是c语言,如有路径有中文,需设置为python,python引擎更为全面;
1.3 txt文件
txt文件是以指制表符t为分隔符的文件,读取时用到read_table来读取,参数与excel、csv基本类似,不同的地方在于必须要指定sep。
df
2. 写入文件
2.1写入文件
excel,csv,txt写入文件的方式基本类似,以pandas的to_xx()方式写入;因为三者类似,这里只用excel格式来示例。
(1)index: 是否保留行索引
(2)columns: 通过列索引指定所需列
(3)sheet_name: 表名
(4)encoding:编码格式,utf-8或者gbk
(5)na_rep: 缺失值填充
(6)inf_rep:无穷值填充
(7)index_label: 行索引标签
(8)header: 默认为True,False没有列索引,如需更改列名,则header = ["列1","列2","列3"]
df
to_csv时需记得设置sep参数!
2.2 多个表写入同个文件
多个数据表需同时写入一个文件时,需用到pandas的ExcelWriter。 步骤如下:
writer
3.批量读取文件
很多时候我们会遇到数据表结构类似,甚至结构相同的文件。处理时如果一个一个的读取,那就太慢了,不符合使用python的我们的风格,我们可以使用循环将多个类似的数据表同时读取,如:
import