现在,每次运行脚本时,我都会导入一个相当大的CSV作为数据框架。是否有一个好的解决方案来保持数据帧在运行之间不断可用,这样我就不必花费所有的时间等待脚本运行?


当前回答

Pandas DataFrame有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

其他回答

泡菜很好!

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

Numpy文件格式对于数字数据来说非常快

我更喜欢使用numpy文件,因为它们快速且易于使用。 下面是一个简单的基准测试,用于保存和加载一个包含100万个点的1列数据框架。

import numpy as np
import pandas as pd

num_dict = {'voltage': np.random.rand(1000000)}
num_df = pd.DataFrame(num_dict)

使用ipython的%%timeit魔法函数

%%timeit
with open('num.npy', 'wb') as np_file:
    np.save(np_file, num_df)

输出为

100 loops, best of 3: 5.97 ms per loop

将数据加载回数据框架

%%timeit
with open('num.npy', 'rb') as np_file:
    data = np.load(np_file)

data_df = pd.DataFrame(data)

输出为

100 loops, best of 3: 5.12 ms per loop

不坏!

CONS

如果您使用python 2保存numpy文件,然后尝试使用python 3打开,则会出现问题(反之亦然)。

https://docs.python.org/3/library/pickle.html

pickle协议格式如下:

协议版本0是原始的“人类可读”协议,并向后兼容Python的早期版本。

协议版本1是一种旧的二进制格式,它也与早期版本的Python兼容。

协议版本2是在Python 2.3中引入的。它提供了更有效的新样式类的pickle。有关协议2带来的改进,请参阅PEP 307。

协议版本3是在Python 3.0中添加的。它显式支持bytes对象,不能被Python 2.x解封。这是默认协议,也是在需要与其他Python 3版本兼容时的推荐协议。

协议版本4是在Python 3.4中添加的。它增加了对非常大的对象、pickle更多类型的对象以及一些数据格式优化的支持。有关协议4带来的改进的信息,请参阅PEP 3154。

Pandas DataFrame有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

Arctic是一个高性能的Pandas, numpy和其他数值数据的数据存储。它位于MongoDB之上。也许对于OP来说有点过分了,但对于其他无意中看到这篇文章的人来说,值得一提