Pandas Python中的大规模数据透视表

Pandas Python中的大规模数据透视表,pandas,pivot-table,bigdata,Pandas,Pivot Table,Bigdata,我有100-300Go数据,采用csv格式(数字+unicode文本),需要在此基础上执行常规透视表作业。在谷歌搜索/堆叠后,无法找到满意的答案(仅部分)。 想知道哪种解决方案最适合单机(64Go RAM): 1) 转换并插入到PostGres并通过SQL处理PostGres数据库中的所有内容? (或MySQL…) 2) 将csv加载到Pandas中的块中并手动逐个处理 3) 加载csv+转换为HDF并按块处理HDF 4) 其他解决方案。对于在一台机器上工作,您列出的3个选项中,PostgreS

我有100-300Go数据,采用csv格式(数字+unicode文本),需要在此基础上执行常规透视表作业。在谷歌搜索/堆叠后,无法找到满意的答案(仅部分)。 想知道哪种解决方案最适合单机(64Go RAM):

1) 转换并插入到PostGres并通过SQL处理PostGres数据库中的所有内容? (或MySQL…)

2) 将csv加载到Pandas中的块中并手动逐个处理

3) 加载csv+转换为HDF并按块处理HDF


4) 其他解决方案。

对于在一台机器上工作,您列出的3个选项中,PostgreSQL可能最适合


为了控制内存使用,您可以分块使用和处理数据

提问者一定已经解决了这个问题,对于其他人来说,我的回答可能会有所帮助。 尝试此解决方案(根据您的数据集进行转换),我尝试了50-80 GB的解决方案。添加numpy将提高性能

import pandas as pd
from datetime import date
from datetime import datetime 

print("1 Load rec =", datetime.now())
df6 = pd.read_csv('sampleDataframeFlux/sampleDataframeFlux.csv',low_memory=False, memory_map=True,engine='c',na_filter=False,index_col=False,usecols=["time", "Label","Server","value"])
print("shape",df6.shape)
   
print("2 Create dataframe =",datetime.now())
df6["Label"]=df6["Server"]+"|"+df6["Label"]
df6.drop(['Server'],axis=1,inplace=True)
    
print("3 Time trim =", datetime.now())
df6['time']=df6['time']//1000000000
print("shape",df6.shape)
  
print("4 Round Epoch to nearest multiple of 5 =", datetime.now())
df6['time']=5*round(df6['time']/5)
print("shape",df6.shape)
  
print("5 Pivot dataframe=", datetime.now())
df6=df6.pivot_table(index='time', columns=["Label"],values="value",fill_value=0)
print("shape",df6.shape)

print("6 Epoch to UTC =", datetime.now())
df6.index=pd.to_datetime(df6.index, unit='s')
    
print("7 Convert to type category to reduce memory =", datetime.now())
df6=df6.astype('category')
print("shape",df6.shape)
   
print("8 Start to write to a file  =", datetime.now())
df6.to_csv('file_11.csv', header=True, chunksize=500000)
print("9 Finish =", datetime.now())

有关于Pivot表的实际经验吗?是的,我以前使用过这3种工具来构建Pivot表和olap多维数据集。在几个100GB的范围内,postgreSQL可以很好地工作,只要有一个分区数据,它就可以在内存中工作,并且避免使用交换?如何使用关系数据库进行透视,因为很多关系数据库的限制是1024列。您应该在@user798719的新问题上发布这一点