从Pickle打开大型Pandas DataFrame后会出现大延迟

时间:2018-02-28 16:57:31

标签: python pandas dataframe

要创建一个大型pandas DataFrame(数据框中的每个条目都是一个浮点数据,数据和数据帧大约为30,000行和几十列),可以在很短的时间内完成一个字典致电:

import pandas as pd
df = pd.DataFrame(my_dict)

这个df对象创建得非常快(约0.05秒)。

此外,使用to_pickle和read_pickle保存和调用数据框可以快速完成。

df.to_pickle(save_path)  # takes ~2.5 seconds
reloaded_df = pd.read_pickle(save_path) # takes 0.1 seconds

但是,当我尝试对reloaded_df进行任何操作时,需要花费不合理的时间和内存。例如,调用:

 reloaded_df.head()  # Takes many minutes to run and uses a lot of RAM.

为什么重新加载数据框这么快,但是对它进行操作需要这么长时间?另外,在重新加载数据框后,调用reloaded_df.head()会快速返回什么是解决方法?

问题How to store a dataframe using Pandas没有解决我的问题,因为他们没有讨论从pickle文件重新加载后使用pandas数据帧的延迟。

我正在使用python 3.5,pandas版本0.22和Windows 10。

1 个答案:

答案 0 :(得分:0)

不确定,但这可能是因为pandas的全部目的在于并非所有数据都会立即加载到内存中。此外,使用DataFrame IO操作时会涉及压缩。可能发生的事情是,pandas只是对文件进行了延迟加载,而不是在访问它之前将其读入内存。