Pickle pandas 数据框将文件大小乘以 5

Rom*_*uin 6 python csv pickle pandas

我正在使用 读取 800 Mb CSV 文件pandas.read_csv,然后使用原始 Pythonpickle.dump(datfarame)保存它。结果是 4 Gb pkl 文件,因此 CSV 大小乘以 5。

我希望 pickle 能够压缩数据而不是扩展数据。另外,因为我可以对 CSV 文件执行 gzip,将其压缩到 200 Mb,然后除以 4。

我愿意加快程序的加载时间,并认为酸洗会有所帮助,但考虑到磁盘访问是主要瓶颈,我了解我宁愿必须压缩文件,然后使用压缩选项来加快pandas.read_csv速度加载时间。

那是对的吗?

pickling pandas dataframe 扩展数据大小是否正常?

您通常如何加快加载时间?

使用 pandas 加载的数据大小限制是多少?

小智 2

将 CSV 文件存储在某种数据库中并对其执行操作可能最符合您的利益,而不是像Kathirmani建议的那样将 CSV 文件加载到 RAM。您将看到加载时间的加速符合您的预期,这仅仅是因为您每次加载脚本时都没有填满 800 Mb 的 RAM。

文件压缩和加载时间是您似乎想要完成的两个相互冲突的元素。压缩CSV文件并加载会花费更多时间;您现在添加了必须解压缩文件的额外步骤,但这并不能解决您的问题。

考虑将数据传送到sqlite3数据库的先导步骤,如下所述:使用 Python 将 CSV 文件导入 sqlite3 数据库表

您现在很高兴能够查询数据的子集并将其快速加载到 a 中pandas.DataFrame以供进一步使用,如下所示:

from pandas.io import sql
import sqlite3

conn = sqlite3.connect('your/database/path')
query = "SELECT * FROM foo WHERE bar = 'FOOBAR';"

results_df = sql.read_frame(query, con=conn)
...
Run Code Online (Sandbox Code Playgroud)

相反,您可以pandas.DataFrame.to_sql()保存这些以供以后使用。