• 72_Pandas.DataFrame保存并读取带pickle的系列(to_pickle、read_pickle)


    72_Pandas.DataFrame保存并读取带pickle的系列(to_pickle、read_pickle)

    要将 pandas.DataFrame、pandas.Series 对象保存为 pickle 文件,请使用 to_pickle() 方法,并使用 pd.read_pickle() 函数读取保存的 pickle 文件。

    在此对以下内容进行说明。

    • 什么是pickle
    • 将 pickle 与 pandas 一起使用的优点
      • 保存/加载为 CSV 文件时
      • 保存/加载为 pickle 文件时
    • 压缩处理

    什么是pickle

    pickle 是 Python 标准库中包含的一个模块,用于将 Python 对象转换为字节(序列化、pickling)以及从字节转换为 Python 对象(反序列化、unpickling)。

    为了方便起见,这里将经过 pickle 并保存的文件称为 pickle 文件。

    将 pickle 与 pandas 一起使用的优点

    pandas 提供了以 CSV 文件和 JSON 文件等格式保存和读取 pandas.DataFrame 和 pandas.Series 对象的方法。

    与 CSV 文件和 JSON 文件不同,pickle 文件无法用编辑器检查或在其他应用程序中重复使用,但优点是对象可以按原样读取和写入,而无需在保存或加载时进行任何特殊设置或处理。 以下面的 pandas.DataFrame 为例。它是使用日期和时间信息作为索引的时间序列数据,'list’列存储列表类型对象。

    import pandas as pd
    
    df = pd.DataFrame({'list': [[0, 0], [0, 1], [1, 0], [1, 1]]},
                      index=pd.date_range('2018-01-01', '2018-01-04', freq='D'))
    
    print(df)
    #               list
    # 2018-01-01  [0, 0]
    # 2018-01-02  [0, 1]
    # 2018-01-03  [1, 0]
    # 2018-01-04  [1, 1]
    
    print(df.index)
    # DatetimeIndex(['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04'], dtype='datetime64[ns]', freq='D')
    
    print(type(df['list'][0]))
    # 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    保存/加载为 CSV 文件时

    保存为 CSV 并重新加载时,首先需要指定 read_csv() 的 index_col 和 parse_dates 参数,以将索引指定为时间序列数据。

    df.to_csv('data/pandas_obj.csv')
    
    df_from_csv = pd.read_csv('data/pandas_obj.csv', index_col=0, parse_dates=True)
    
    print(df_from_csv)
    #               list
    # 2018-01-01  [0, 0]
    # 2018-01-02  [0, 1]
    # 2018-01-03  [1, 0]
    # 2018-01-04  [1, 1]
    
    print(df_from_csv.index)
    # DatetimeIndex(['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04'], dtype='datetime64[ns]', freq=None)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    此外,由于“list”列被读取为字符串,因此有必要将其转换为列表类型对象,例如通过将内置函数 eval() 应用于每个元素。

    print(type(df_from_csv['list'][0]))
    # 
    
    df_from_csv['list'] = df_from_csv['list'].apply(eval)
    
    print(df_from_csv)
    #               list
    # 2018-01-01  [0, 0]
    # 2018-01-02  [0, 1]
    # 2018-01-03  [1, 0]
    # 2018-01-04  [1, 1]
    
    print(type(df_from_csv['list'][0]))
    # 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    保存/加载为 pickle 文件时

    如果使用 to_pickle() 和 read_pickle() 将其视为 pickle 文件,则可以保存该对象而无需指定参数或转换它,并且可以按原样恢复它。

    df.to_pickle('data/pandas_obj.pkl')
    
    df_from_pkl = pd.read_pickle('data/pandas_obj.pkl')
    
    print(df_from_pkl)
    #               list
    # 2018-01-01  [0, 0]
    # 2018-01-02  [0, 1]
    # 2018-01-03  [1, 0]
    # 2018-01-04  [1, 1]
    
    print(df_from_pkl.index)
    # DatetimeIndex(['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04'], dtype='datetime64[ns]', freq='D')
    
    print(type(df_from_pkl['list'][0]))
    # 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    当想要保存对象的状态以暂时挂起工作时,pickle 文件也很有用,并且不必考虑任何特定的事情。 此外,它还具有比 CSV 等更快的处理速度的优点。

    压缩处理

    如果将扩展名指定为 .gz、.bz2、.xz 或 .zip,将自动执行压缩/解压缩过程。

    df.to_pickle('data/pandas_obj.zip')
    
    df_from_pkl_zip = pd.read_pickle('data/pandas_obj.zip')
    
    print(df_from_pkl_zip)
    #               list
    # 2018-01-01  [0, 0]
    # 2018-01-02  [0, 1]
    # 2018-01-03  [1, 0]
    # 2018-01-04  [1, 1]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    还可以在压缩参数中显式指定格式(‘gzip’、‘bz2’、‘xz’、‘zip’)。

  • 相关阅读:
    Servlet API Cookie和Session
    Python文件读写实战:处理日常任务的终极工具!
    python经典百题之围圈报数
    解决Vision Transformer在任意尺寸图像上微调的问题:使用timm库
    论程序员按代码行数领工资是什么体验?
    比特币上的人工智能
    python求二维数组最大值
    夯基提质|正雅膜片及附件定位系统双升级
    JSON数据
    微信小程序检查版本更新
  • 原文地址:https://blog.csdn.net/qq_18351157/article/details/136331832