jef*_*ern 283 python dataframe pandas
现在我CSV
每次运行脚本时都会导入一个相当大的数据帧.是否有一个很好的解决方案可以保持数据帧在运行之间始终可用,因此我不必花费所有时间等待脚本运行?
And*_*den 432
df.to_pickle(file_name) # where to save it, usually as a .pkl
Run Code Online (Sandbox Code Playgroud)
然后你可以使用以下方法加载它:
df = pd.read_pickle(file_name)
Run Code Online (Sandbox Code Playgroud)
注意:在0.11.1之前save
并且load
是唯一的方法(它们现在被弃用to_pickle
,read_pickle
分别赞成和).
另一个流行的选择是使用HDF5(pytables),它为大型数据集提供非常快的访问时间:
store = HDFStore('store.h5')
store['df'] = df # save it
store['df'] # load it
Run Code Online (Sandbox Code Playgroud)
烹饪书中讨论了更高级的策略.
从0.13开始,msgpack也可以更好地实现互操作性,作为JSON的更快替代方案,或者如果你有python对象/文本重量数据(参见这个问题).
ago*_*old 90
虽然已经有一些答案,但我发现了一个很好的比较,他们尝试了几种方法来序列化Pandas DataFrames:Efficiently Store Pandas DataFrames.
他们比较:
在他们的实验中,他们序列化了1,000,000行的DataFrame,其中两列分别进行了测试:一列有文本数据,另一列有数字.他们的免责声明说:
您不应相信以下内容会对您的数据进行推广.您应该查看自己的数据并自己运行基准测试
他们引用的测试源代码可在线获取.由于此代码没有直接工作,我做了一些小的更改,你可以在这里:serialize.py 我得到以下结果:
他们还提到,通过将文本数据转换为分类数据,序列化速度更快.在他们的测试中大约快10倍(也见测试代码).
编辑:泡菜比csv更高的时间可以用所用的数据格式来解释.默认情况下,pickle
使用可打印的ASCII表示,生成更大的数据集.然而,从图中可以看出,使用较新的二进制数据格式(版本2 pickle-p2
)的pickle 具有低得多的加载时间.
其他一些参考:
numpy.fromfile
是最快的.Noa*_*oah 32
如果我理解正确,你已经在使用,pandas.read_csv()
但是想加快开发过程,这样你就不必在每次编辑脚本时加载文件,是吗?我有一些建议:
您只能加载CSV文件的一部分,pandas.read_csv(..., nrows=1000)
只能加载表格的顶部位,而您正在进行开发
使用ipython进行交互式会话,以便在编辑和重新加载脚本时将pandas表保留在内存中.
将csv转换为HDF5表
更新使用DataFrame.to_feather()
并pd.read_feather()
以超快速的R兼容羽毛二进制格式存储数据(在我手中,比pandas.to_pickle()
数字数据稍快,在字符串数据上快得多).
您可能也对stackoverflow上的这个答案感兴趣.
Anb*_*ran 17
泡菜很好用!
import pandas as pd
df.to_pickle('123.pkl') #to save the dataframe, df to 123.pkl
df1 = pd.read_pickle('123.pkl') #to load 123.pkl back to the dataframe df
Run Code Online (Sandbox Code Playgroud)
小智 10
您可以使用羽毛格式文件。它非常快。
df.to_feather('filename.ft')
Run Code Online (Sandbox Code Playgroud)
Pandas DataFrames 具有to_pickle
用于保存 DataFrame 的功能:
import pandas as pd
a = pd.DataFrame({'A':[0,1,0,1,0],'B':[True, True, False, False, False]})
print a
# A B
# 0 0 True
# 1 1 True
# 2 0 False
# 3 1 False
# 4 0 False
a.to_pickle('my_file.pkl')
b = pd.read_pickle('my_file.pkl')
print b
# A B
# 0 0 True
# 1 1 True
# 2 0 False
# 3 1 False
# 4 0 False
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
260525 次 |
最近记录: |