4.Pandas读取和保存数据文件


Pandas 主要是用来进行数据处理的,在日常使用时,我们更多的是从文件中读取数据,Pandas 提供了非常多的方法,可以非常方便的读取不同格式的数据文件。

4.1 读写接口概览览

Pandas I/O API 提供了一组顶层的读取写方法,使用如 pandas.read_csv(文件名)会返回一个 DataFrame 对象,而使用如 DataFrame.to_csv(文件名) 这样的对象方法,则将 DataFrame 对象保存到文件中。

一些常用的数据格式和读写方式罗列在此:

存储格式 文件类型 读取方法 输出(保存)方法
text CSV read_csv to_csv
text JSON read_json to_json
text HTML read_html to_html
text Local clipboard read_clipboard to_clipboard
binary MS Excel read_excel to_excel
binary HDF5 read_hdf to_hdf
binary ORC read_orc to_orc
binary Parquet read_parquet to_parquet
SQL SQL read_sql to_sql

官网提供了读写各种数据的接口,如果想要查看更详细的内容,地址如下:
Pandas I/O API

4.2 读写CSV文件

CSV 文件是一种非常常见的文件格式,几乎所有编程语言都有读写 CSV 文件的函数,这里详细介绍下 pandas.read_csv() 和 DataFrame.to_csv() 函数。

4.2.1 pandas.read_csv()

官方文档:https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html
pandas.read_csv() 函数用于从 CSV 文件中读取数据,并生成一个 DataFrame 对象。它可以接受的参数如下:

下面挑选一些常用的来解释一下:

4.2.1.1 基础参数

  1. filepath_or_buffer
    文件名(路径)(str)或者文件对象(如已经打开的文件)。

  2. sep
    分隔符(str),默认为逗号(‘,’)。
    即每一行数据是以什么符号分隔为不同列的,常见的分隔符还有:’|’, ‘\t’, ‘ ‘ 等。

  3. delimiter
    定界符(str),默认为None,是sep的别名,效果和sep一样。如果使用该参数,则sep参数失效。

4.2.1.2 索引类参数

  1. header
    表头,即DataFrame的列名,接收整数或者整型列表(int or list of ints), 当输入整数k时,会使用序号 k 行的数据作为列名。
    默认是通过第一行数据来推理其列名(default ‘infer’)

  2. names
    也是指定列名,接收列表(list of strings),当header参数设置为None时,使用该参数来指定列名。

  3. index_col
    指定行索引名,接收 int、str、int序列、str序列、False;
    默认为None,即不设置index名,会使用 0,1,2, … 等序号作为行索引名。
    当index_col参数为整数序列时,表示使用该序列作为行索引名,而当index_col参数为整数时,表示使用该列作为行索引名。

  4. usecols
    读取数据的指定列,即可以不用加载全部列;接收正整数序列或者列名列表;
    默认为None,即读取全部数据。

4.2.1.3 通用的解析类型参数

  1. dtype
    指定数据类型,接收字典或者列表;
    默认为None,即自动推断数据类型。
    字典格式为 {列名:数据类型},列表格式为 [(列名,数据类型)]。

  2. engine
    解析引擎,接收’c’或者’python’,默认为’python’。

  3. converters
    列转换函数,接收字典格式,{列名: 转换函数} 或 {列索引: 转换函数}。

  4. true_values
    指定将某些值设置为 True ,接收列表格式,默认为 None。

  5. false_values
    指定将某些值设置为 False ,接收列表格式,默认为 None。

  6. skipinitialspace
    是否跳过 delimiter 初始空白字符,默认为False。

  7. skiprows
    指定跳过指定行数,默认为None。
    接收列表格式(表示跳过哪些行),或者整数格式(表示从开头算起,跳过前面的多少行)。

  8. skipfooter
    指定跳过尾部行数,接收整数格式,默认为0。

  9. nrows
    指定读取的行数,接收整数格式(表示读取前n行),默认为None。

  10. memory_map
    布尔值,默认为 False;
    如果为 filepath_or_buffer 提供了一个文件路径,则将文件对象直接映射到内存中,并从那里直接访问数据。使用此选项可以提高性能,因为不再有任何I/O开销。

4.1.1.4 缺失值处理

  1. na_values
    指定哪些值应该被视为 NA/NaN,接收列表格式,默认为None。

  2. keep_default_na
    布尔值,默认为True
    在解析数据时是否包含默认的NaN值。根据是否传入na_values,行为如下:

    • 如果keep_default_na为True,并且指定了na_values,则将na_values添加到用于解析的默认NaN值之后。

    • 如果keep_default_na为True,并且没有指定na_values,则只使用默认的NaN值进行解析。

    • 如果keep_default_na为False,并且指定了na_values,则只使用na_values指定的NaN值进行解析。

    • 如果keep_default_na为False,并且没有指定na_values,则不会将任何字符串解析为NaN。

      注意,如果na_filter作为False传入,keep_default_na和na_values参数将被忽略。

  3. na_filter
    布尔值,默认为 True;
    检测缺失的值标记(空字符串和na_values的值)。对于没有NAs的数据,设置na_filter=False可以提高读取大文件的性能。

  4. verbose
    布尔值,默认为False;
    用于指示在非数字列中插入的 NA 值数量,即如果数据包含非数字列,并且这些列中包含缺失值(例如 NaN 或 NA),则可以通过设置 verbose 参数为 True 来获取有关缺失值的数量信息。

  5. skip_blank_lines
    布尔值,默认为True;
    如果为 True,则跳过空行。

4.1.1.5 迭代器

官方用法指导:https://pandas.pydata.org/docs/user_guide/io.html#iterating-through-files-chunk-by-chunk

  1. iterator
    布尔值,默认为False;
    如果为 True,则返回一个迭代器对象:TextFileReader,进行分块处理。

  2. chunksize
    整数,默认为None;
    如果chunksize为一个整数,则返回一个迭代器对象,该对象每次返回chunksize行。

一些平常能用的基本就是这些, 如果想要更详细和更全面的参数介绍,建议还是查阅官方文档

4.2.2 DataFrame.to_csv()

官方文档:
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_csv.html

对于一个 DataFrame 对象,可以使用 DataFrame.to_csv() 方法将数据保存到本地文件。它可接受的参数如下:

其实完全可以对照 read_csv() 方法来看,大部分都是通用的。

4.2.2.1 基本参数

  1. path_or_buf
    要保存的文件路径或文件对象;

  2. sep
    分隔符,默认为逗号;

  3. delimiter
    sep的别名,默认为None;

4.2.2.2 索引类参数

  1. header
    表头参数,表示是否保存表头行,布尔值,默认为True;

  2. names
    也是指定列名,接收列表(list of strings),当header参数设置为None时,使用该参数来指定列名。

  3. index_col
    索引参数,表示是否保存索引列,布尔值,默认为True。

  4. usecols
    读取数据的指定列,即可以不用保存全部列;接收正整数序列或者列名列表;
    默认为None,即保存全部数据。

… 大部分都可以参考 read_csv()方法中的参数,这里就不再重复赘述了。

4.3 读写Excel文件

MS Excel文件也是日常工作中最常用的存储数据的文件之一,而Pandas也提供了读写Excel文件的方法。

4.3.1 pandas.read_excel()

官方文档链接
https://pandas.pydata.org/docs/reference/api/pandas.read_excel.html

pandas.read_excel()用于读取Excel文件,它可接受的参数如下:

4.3.1.1 基本参数

  1. io
    Excel文件路径或Excel文件对象;

  2. sheet_name
    指定读取的sheet名,接收字符串、字符串序列、整数、整数序列;
    默认为0,即读取第一个sheet;

  3. header
    指定表头行,接收整数、整数序列、布尔值;
    默认为0,即第一行作为表头;

其余的很多参数也就和 read_csv()方法中的参数类似了,这里就不再重复赘述了。想具体了解的可以参考官方文档。

4.3.2 DataFrame.to_excel()

官方文档链接
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_excel.html

  1. excel_writer
    Excel文件路径或Excel文件对象;

  2. sheet_name
    指定写入的sheet名,接收字符串、字符串序列、整数、整数序列;
    默认为0,即写入第一个sheet;

  3. na_rep
    缺失值表示,接收字符串;
    默认为空字符串;

  4. float_format
    浮点数格式,接收字符串;
    比如 float_format=”%.2f”

  5. startrow
    起始行,接收整数; 默认为0

  6. startcol
    起始列,接收整数; 默认为0

其他的一些参数也和 read_excel()的参数类似,这里就不再赘述了。想具体了解的可以参考官方文档。