是否可以使用 pandas and/or pyreadstat 分块读取大型 SPSS 文件,或者是否存在替代方案?

Is it possible to use pandas and/or pyreadstat to read a large SPSS file in chunks, or does an alternative exist?

我有一个需要打开的 SPSS 数据库,但它很大,如果像下面的代码那样天真地打开它,它会使 RAM 饱和并最终崩溃。

import pandas as pd

def main():
    data = pd.read_spss('database.sav')
    print(data)

if __name__=='__main__':
    main()

读取 SAS 数据库的等效 pandas 函数允许使用 chunksizeiterator 关键字,映射文件而无需一次将其全部读入 RAM,但对于 SPSS这个选项似乎丢失了。是否有另一个 python 模块可用于此任务,允许映射数据库而无需将其全部读入 RAM?

您可以通过生成器 read_file_in_chunks 使用 pyreadstat。使用参数 chunksize 来规定每次迭代应该读取多少行。

import pyreadstat
fpath = 'database.sav'
reader = pyreadstat.read_file_in_chunks(pyreadstat.read_sas7bdat, fpath, chunksize= 10000)

for df, meta in reader:
    print(df) # df will contain 10K rows
    # do some cool calculations here for the chunk

Pandas read_spss 在后台使用 pyreadstat,但只公开了一部分选项。