Преобразование файла .sav в файл данных pandas - PullRequest
1 голос
/ 07 мая 2019

Я нахожусь в процессе написания средства проверки данных для просмотра spss-файлов, и мне необходимо программно обрабатывать различные проверки.Первый шаг - получить доступ к файлу spss, преобразовать его в фрейм данных pandas и запустить оттуда мои проверки.Единственный способ сделать это - через RPY2.К сожалению, я очень мало знаю R и не могу заставить работать ни одно из приведенных ниже решений.Любая помощь / литература будет высоко ценится.

Я извлек некоторые вещи из других постов и создал это:

Использование RPY2

from rpy2.robjects import pandas2ri
from rpy2.robjects import r
from pathlib import Path
import pyreadstat
pandas2ri.activate()

w = r('foreign::read.spss("%s", to.data.frame=TRUE)' % filename)
df = pandas2ri.ri2py(w)
df.head()
w.head()

Ошибка:

rpy2.rinterface_lib.embedded.RRuntimeError: Error in foreign::read.spss("path to test.sav",  : 
  error reading system-file header

Использование pyreadstat (это дает мне столбцы, но выдает ошибки, когда я пытаюсь получить базовые данные)

    meta = pyreadstat.read_sav(filename, metadataonly=True)
    cols = [x for x in meta[0]]
    df, meta = pyreadstat.read_sav(filename, usecols=cols)
    print(df)

Ошибка:

pyreadstat._readstat_parser.PyreadstatError: STRING type with value 4/23/19 17:50 with date type

ОБНОВЛЕНИЕ:

Использование гавани сейчас, новсе еще получаются ошибки:

rdf = r(f'haven::read_sav("{filename}")')

Ошибка:

ValueError: Invalid value NaN (not a number)

1 Ответ

0 голосов
/ 08 мая 2019

Скорее вы можете использовать библиотеку scipy.io.readsav для преобразования файла .sav в словарь

scipy.io.readsav(file_name, idict=None, python_dict=False,
 uncompressed_file_name=None, verbose=False)

Затем словарь можно легко преобразовать в кадр данных pandas.

...