在Windows 7 (x64)上使用pandas dataframe读取大型SPSS文件的性能问题

4

我有一个大的SPSS文件(包含略多于1百万个记录,大约150列),我想将其转换为Pandas DataFrame。

将文件转换为列表需要几分钟时间,再将其转换为数据帧需要另外几分钟,然后再需要几分钟来设置列标题。

我是否错过了任何可能的优化方法?

import pandas as pd
import numpy as np
import savReaderWriter as spss

raw_data = spss.SavReader('largefile.sav', returnHeader = True) # This is fast
raw_data_list = list(raw_data) # this is slow
data = pd.DataFrame(raw_data_list) # this is slow
data = data.rename(columns=data.loc[0]).iloc[1:] # setting columnheaders, this is slow too.

转换为列表会非常慢,文件的格式是什么?它可以先转换为csv吗?pandas在读取csv文件时非常快,而且如果您将其作为csv读取,则可以指定哪些行/列是标题。此外,您可以设置参数inplace=True,这样就可以在不返回副本的情况下完成操作。data.rename(columns=data.loc[0], inplace=True).iloc[1:] - EdChum
@EdChum 如果你使用 inplace=True,就像你现在这样使用它,那么它会形成链式操作,并且很少实际保存任何东西。 - Jeff
将其转换为CSV格式使得差异巨大!我使用了PSPP进行转换。同时设置了列名。谢谢! - bowlby
1个回答

3

您可以使用 rawMode=True 来加快处理速度,例如:

raw_data = spss.SavReader('largefile.sav', returnHeader=True, rawMode=True)

这样,日期时间变量(如果有的话)就不会被转换为 ISO 字符串,SPSS $sysmis 值也不会被转换为 None,还有一些其他的东西。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接