美文网首页SEO
Pandas的IO方法一

Pandas的IO方法一

作者: aikonwen | 来源:发表于2019-04-24 21:50 被阅读0次

    根据官方文档提供的说明(IOTools),Pandas支持常用的文本格式数据(csv、json、html、剪贴板)、二进制数据(excel、hdf5格式、Feather格式、Parquet格式、Msgpack、Stata、SAS、pkl)、SQL数据(SQL、谷歌BigQuery云数据),各类型数据处理的方法如下表:

    数据类型 描述符 读方法 写方法
    text CSV read_csv to_csv
    text JSON read_json to_json
    text HTML read_csv to_csv
    text 剪贴板 read_clipboard to_clipboard
    二进制 Excel read_excel to_excel
    二进制 HDF5 read_hdf to_hdf
    二进制 PKL read_pickle to_pickle
    SQL SQL read_sql to_sql

    下面详细介绍常用的csv、txt、excel、json、pkl格式文件的读写操作。

    • 对csv和txt格式的读写,read_csv()方法兼容,因为这两种格式的数据本质上的形式都是数据加分隔符,旧版本的read_table()方法已经整合到read_csv()方法中,即指定分隔符为'\t',代码如下:
    import pandas as pd
    # 读取csv文件
    pd.read_csv('/home/root/foo.csv')
    # 读取txt文件
    pd.read_csv('/home/root/bar.txt')
    
    • read_csv()常用的几个参数说明:
    • sep: 分割符,csv和txt默认为',', 但是有些数据集里面可能是空格或者'\t';
    • header: 表头,int或者int的列表,默认为'infer',即需要制定某一行作为数据的列名;
    • iterator: 为True的话返回的是文件读取对象,可以用迭代的方法或者get_chink()方法去读取;
    • index_col: int,队列或者布尔类型,用于作为行标签的列;
    • prefix: str类型,当未制定表头时给列加上的前缀;
    • dtype: type名称或者是列名和类型的映射关系字典,例如:{'a': np.float64, 'b': np.int32, 'c': ‘Int64’};
    • engine: 制定读取文件的引擎类型{'c', 'python'}, 使用C语言速度更快,python引擎速度慢点但是功能更完善;
    • nrows: 指定要读取的行数;
    • encoding: 指定文件的编码格式;
    • error_bad_lines: 带太多空格的列会引发异常,设置为True的时候会删除这些异常列;
    • low_memory: 默认为True,限制每次读取文件块大小,避免读操作占用太多内存, 置为False在实际使用过程中反而读取文件更慢,可能是内存占用过高影响到磁盘IO的操作;
    • csv和txt类型数据集读取前通常还需要进行编码判断以及分隔符判断:
    # 编码判断方法
    def encode_judge(file_dir):
      charset = 'utf8'
      file_ext = file_dir.rsplit('.', 1).pop().lower()
      if file_ext in ('csv', 'txt', 'xls', 'xlsx'):
        for i in ('utf8', 'gb18030', 'latin'):
          try:
              with open(file_dir, "r", encoding=i) as file:
                file.read(1024 * 1024 * 10)
                charset = i
                break
          except:
              pass
      return charset
    # 分隔符判断方法
    def get_sep(lines):
      result = ','
      for sep in (',', '\t', ' '):
        if sep in lines:
          result = sep
          break
      return result
    
    • 对xls和xlsx格式的读写,调用read_excel():, read_table()的参数和read_csv()大体一致就是少了iterator参数,因为excel为二进制编码格式文件不支持迭代方式读取, 代码如下:
    # 借用xlrd这个包可以提高读取excel格式的兼容性能
    # 读取前也参照上面的编码检测操作
    import xlrd
    content = xlrd.open_workbook(filename=file_dir, encoding_override=charset)
    pd.read_excel(content, engine='xlrd')
    

    对于其他文件的读取可参照上面列表以及官方文档说明,text类型的文件一般支持迭代方式读取,二进制文件只能一次性读取, sql读取和pkl的读取在下篇文章中更新。

    相关文章

      网友评论

        本文标题:Pandas的IO方法一

        本文链接:https://www.haomeiwen.com/subject/ptongqtx.html