是否可以使用 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 函数允许使用 chunksize
和 iterator
关键字,映射文件而无需一次将其全部读入 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,但只公开了一部分选项。
我有一个需要打开的 SPSS 数据库,但它很大,如果像下面的代码那样天真地打开它,它会使 RAM 饱和并最终崩溃。
import pandas as pd
def main():
data = pd.read_spss('database.sav')
print(data)
if __name__=='__main__':
main()
读取 SAS 数据库的等效 pandas 函数允许使用 chunksize
和 iterator
关键字,映射文件而无需一次将其全部读入 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,但只公开了一部分选项。