2.2 数据读取和存储

2.2.1 Excel文件的读取

1.文件路径的切换

要读取某一个文件中的数据,必须先告诉Python这个文件所在的位置,即输入文件路径。

现有一个名为data1的Excel文件,存放在如图2-2所示的位置。

图2-2 样例文件路径位置

通过导入os系统模块,把Python切换到这个文件路径下:

os.chdir()是实现系统文件路径切换的方法,可在其括号中输入我们从系统中复制的文件地址。

需要注意的是,路径前面加了一个r。文件路径一般都包含斜杠,而斜杠在Python中会有其他含义(如转义),在路径前加r相当于告诉Python路径里的内容没有其他意思,从而保证路径被程序完整、准确地理解。

2.read_excel()的用法

切换完路径之后,用Pandas的pd.read_excel('具体文件名')(这里为data1.xlsx)来读取Excel文件:

运行结果如下:

上面只赋予Excel名称的读取方式,默认打开的是第一个工作表(sheet)。当一个Excel文件包含多个工作表时,通过指定具体sheet_name的方式实现更精准的读取:

读取结果如下:

3.header和names

data1.xlsx中sheet1的数据源如表2-3所示。

表2-3 data1.xlsx中sheet1的数据源

Pandas在读取的时候很智能地把第一行当作了表头来处理,数据则从第二行开始。

假如我们遇到了sheet2中的数据,当时在Excel文件中只保存了数据,而没有保存表头,如表2-4所示。

表2-4 data1.xlsx中sheet2的数据源

如果用Pandas直接读取,默认将第一行当作表头的规则就显得不那么智能了,读取和展示结果如图2-3所示。

图2-3 读取没有表头的数据

这个时候可以把header参数设置成None,来告诉Pandas源数据中没有表头,效果如图2-4所示。

图2-4 设置header读取无表头数据

如果将header设置成None,默认的表头是从0~3的几个数字,很不美观。我们可以在读取的时候通过names参数,把表头设置成我们期望的内容,如图2-5所示。

图2-5 读取时设置表头

当然,header除了设置成None,还可以设置成数字,代表在读取时把第几行数据作为表头。假如我们想要把Sheet1中的小明所在的第二行作为表头,只需把header设置成1(Python中计数从0开始)即可,如图2-6所示。

这样一来,小明对应的数据行就成了表头。

4.其他参数

除了默认或指定Sheet读取、设置数据表头,Pandas读取数据还有很多灵活操作的参数,例如:

❑index_col指定索引列;

❑usecols指定读取部分列;

❑nrows指定读取部分行;

❑prefix给表头设置前缀;

❑dtype和字典结合,读取时为每一列数据设置格式。

参数非常丰富,不过我们的Pandas学习之旅有一个重要原则是“抓大放小”,为了避免陷入细节的泥沼无法自拔,比较琐碎且不常用的参数不展开介绍,只是告诉大家有相关的参数,读者在需要的时候可以自行查阅。

图2-6 用header指定表头

2.2.2 CSV文件的读取

Pandas读取CSV文件用的是pd.read_csv('具体文件名')方法。不过Pandas在Excel和CSV文件的读取上有很高的相似性,上一小节讲的大多数规则和参数也适用于CSV文件的读取。

需要注意的是,在实际操作中Excel文件的读取一般不会有什么问题,但由于中文路径和编码等问题,CSV的读取是报错的高发区。接下来,重点看看CSV文件的3个注意点以及如何避免错误。

1.中文路径

当文件路径是中文时,如果直接读取,在一些Python版本里会报错。因为Python默认的读取引擎是C语言,它在处理中文时容易出问题。这个时候把读取引擎参数engine设置为Python就可以解决:

2.编码设置

CSV文件有不同的编码形式,utf-8和gbk是两种最常见的编码形式。类似于一把钥匙对一个锁,如果文件是gbk编码,那么用utf-8就打不开。Pandas在读取文件时默认采用utf-8的编码格式。

用默认的方式打开我们CSV的案例数据,可能会报错,如图2-7所示。

图2-7 读取数据报错

通过设置encoding参数来指定文件编码格式,在读取gbk和其他编码文件的时候设置成对应编码即可解决问题:

结果如下:

3.分隔符的处理

pd.read_csv()方法在读取CSV文件时,默认是以逗号作为分隔符来打开的(这也是绝大部分CSV文件使用的分隔方式),但如果文件在存储时使用的是其他分隔符,那么就需要在读取时设置好sep参数:

以上代码打开的文件是以\t为分隔符的。

2.2.3 其他文件类型的读取

1.TXT文件的读取

Pandas读取TXT文件用的是pd.read_table()方法,需要在读取时输入TXT文件的名称和分隔符(这里必须指定):

2.JSON文件的读取

JSON文件是一种类字典形式的文件,在读取时用pd.read_json()方法。

Excel和CSV是两种最为常见的文件类型,其他文件类型的读取这里只简单提及,因为它们只有打开的方法有所差异,大部分参数对它们也是通用的。

2.2.4 存储数据

当对数据进行读取、处理和分析之后,往往需要把结果数据存储起来。

在Pandas中存储数据非常方便,用的是data.to_×××()方法(×××是你期望存储的文件类型):

默认的存储方式会把索引也作为一列存储,如果不希望存储索引,设置index=False即可: