【问题标题】:Is it possible to use pandas and/or pyreadstat to read a large SPSS file in chunks, or does an alternative exist?是否可以使用 pandas 和/或 pyreadstat 分块读取大型 SPSS 文件,或者是否存在替代方案?
【发布时间】:2020-02-27 15:02:16
【问题描述】:

我有一个需要打开的 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?

【问题讨论】:

  • 它有多“巨大”?有多少变量/案例/数据点?不久前我遇到了类似的问题并放弃了这条路:)。 csv 输入更可靠...
  • 这是一个扁平的数据库,大约有 500,000 行,每行约 500 列。 CSV 导出将起作用,我只是好奇是否有更清洁的方式来使用本机文件。

标签: python-3.x pandas spss


【解决方案1】:

您可以通过生成器 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,但只公开一部分选项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多