在Python中有没有办法将16GB左右的SAS文件拆分为多个文件/数据帧?

2024-05-16 03:26:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大约16GB的原始SAS文件,即使保留了与我的问题相关的列,文件大小也大约为8GB。看起来是这样的:

CUST_ID   FIELD_1   FIELD_2   FIELD_3 ... FIELD_7
1          65         786      ABC          Y
2          87         785      GHI          N
3          88         877      YUI          Y
...
9999999    92         767      XYS          Y

当我尝试使用以下代码将其导入Python时: df=pd.read_sas(path,format='SAS7BDAT') 我的屏幕变黑了,在多次尝试之后,我终于得到了错误MemoryError。 因为我的问题需要整个CUST_ID集合,所以只选择一个样本并删除其他行是不可能的

我想也许我可以将整个文件拆分成多个子文件,这样我就可以执行所有需要的计算,然后在完成所有必要的工作后,最终将这些文件合并成一个大文件

有没有办法解决这个问题?我真的很感激我能得到的所有帮助

编辑:

我试过这个

chunk_list=[]
for chunk in df_chunk 
       chunk_filter=chunk
       chunk_list.append(chunk_filter)

df_concat=pd.concat(chunk_list)

但我还是得到了Memory Error。有什么帮助吗


Tags: 文件idfielddffilterlistpdabc
2条回答

在进行处理之前,将迭代器标志设置为true并在循环中拆分文件

参考:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_sas.html

或在执行输出之前在SAS中拆分文件


我认为你正在尝试的是:

CHUNK = 10
df=pd.read_sas(path,format='SAS7BDAT',chunksize = CHUNK)

for chunk in df:
  # perform compression
  # write it out of your memory onto disk to_csv('new_file',
    # mode='a', # append mode
    # header=False, # don't rewrite the header, you need to init the file with a header
    # compression='gzip') # this is more to save space on disk maybe not needed

df=pd.read_csv(new_file)

您可以尝试压缩循环内的数据,因为否则在合并时它将再次失败:

  1. 下降柱
  2. 下限数值型
  3. 范畴
  4. 稀疏列

参考:https://pythonspeed.com/articles/pandas-load-less-data/

对于read_sas有一个chunksize参数,它应该允许您将大文件分解成更小的部分,以便能够读入chunksize是一次要读取的记录数

相关问题 更多 >