使用Pandas的数据透视表的大数据

时间:2018-01-04 22:07:13

标签: python pandas dataframe bigdata pivot-table

我目前正在使用Postgres数据库存储调查答案。

我面临的问题是我需要从Postgres数据库生成数据透视表。

当数据集很小时,很容易只读取整个数据集并使用Pandas来生成数据透视表。

但是,我现在的数据库现在有大约500k行,并且每天增加大约1000行。阅读整个数据集不再有效。

我的问题是,我是否需要使用HDFS在磁盘上存储数据并将其提供给Pandas进行旋转?

我的客户需要几乎实时查看数据透视表输出。我们有什么方法可以解决它吗?

我的理论是,我将创建500k行的数据透视表输出并将输出存储在某处,然后当新数据保存到数据库中时,我只需要将新数据与现有数据透视表合并。我不太确定Pandas是否支持这种方式,或者它需要一个完整的数据集来进行旋转?

1 个答案:

答案 0 :(得分:0)

您是否尝试过使用pickle。我是一名数据科学家,并且一直使用1M +行和数百列的数据集。

在您的特定情况下,我会推荐以下内容。

import pickle 
save_data = open('path/file.pickle', 'wb') #wb stands for write bytes
pickle.dump(pd_data, save_data)
save_data.close()

在上面的代码中,您正在做的是以紧凑的格式保存数据,可以使用以下方式快速加载:

pickle_data = open('path/file.pickle', 'rb') #rb stands for read bytes 
pd_data = pickle.load(pickle_data)
pickle_data.close()

此时,您可以使用新的1,000行追加数据(pd_data)并使用pickle再次保存。如果您的数据将继续增长并且您希望内存成为问题,我建议您确定一种方法来附加或连接数据而不是合并或连接,因为后两者也会导致内存问题。

您会发现,当您从磁盘上读取内容时,这将缩短显着的加载时间(我使用Dropbox并且它仍然快速闪电)。为了进一步减少这种情况,我通常做的是将我的数据分组成行和组。列然后编写加载pickle数据的方法(超级有用的图形)。