本文主要是介绍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 对象的方法。
- 03_Pandas读取csv/tsv文件(read_csv,read_table)
- 34_Pandas对CSV文件内容的导出和添加(to_csv)
- 50_Pandas读取 Excel 文件 (xlsx, xls)
- 51_Pandas (to_excel) 编写 Excel 文件 (xlsx, xls)
- 55_Pandas.DataFrame 转换为 JSON 字符串/文件并保存 (to_json)
- 56_Pandas读取 JSON 字符串/文件 (read_json)
与 CSV 文件和 JSON 文件不同,pickle 文件无法用编辑器检查或在其他应用程序中重复使用,但优点是对象可以按原样读取和写入,而无需在保存或加载时进行任何特殊设置或处理。 以下面的 pandas.DataFrame 为例。它是使用日期和时间信息作为索引的时间序列数据,'list’列存储列表类型对象。
import pandas as pddf = 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]))
# <class 'list'>
保存/加载为 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)
此外,由于“list”列被读取为字符串,因此有必要将其转换为列表类型对象,例如通过将内置函数 eval() 应用于每个元素。
- 06_Pandas中map(),applymap(),apply()函数的使用方法
print(type(df_from_csv['list'][0]))
# <class 'str'>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]))
# <class 'list'>
保存/加载为 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]))
# <class 'list'>
当想要保存对象的状态以暂时挂起工作时,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]
还可以在压缩参数中显式指定格式(‘gzip’、‘bz2’、‘xz’、‘zip’)。
这篇关于72_Pandas.DataFrame保存并读取带pickle的系列(to_pickle、read_pickle)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!