pandas 使用python阅读.sav

kdfy810k  于 2022-11-20  发布在  Python
关注(0)|答案(2)|浏览(360)

bounty将在23小时后过期。回答此问题可获得+100声望奖励。Wild Chemist希望吸引更多人关注此问题。

因此,我尝试使用python读取.sav文件并将其转换为. csv。我已经获得了读取.sav文件的代码,并且我还使用test .sav检查了它,我设法将其转换为csv。然后我继续使用真实的的.sav文件,而不是它不再工作。以下是代码:

import pyreadstat

df, meta = pyreadstat.read_sav('./RaceDatas.sav')

df.to_csv('BloodRace.csv', index=False)

错误如下:

runfile('C:/Users/usuario/Desktop/Python tests/ARK Projects/no.py', wdir='C:/Users/usuario/Desktop/Python tests/ARK Projects')
Traceback (most recent call last):

  File "C:\Program Files\Spyder\pkgs\spyder_kernels\py3compat.py", line 356, in compat_exec
    exec(code, globals, locals)

  File "c:\users\usuario\desktop\python tests\ark projects\no.py", line 3, in <module>
    df, meta = pyreadstat.read_sav('./RaceDatas.sav')

  File "pyreadstat\pyreadstat.pyx", line 364, in pyreadstat.pyreadstat.read_sav

  File "pyreadstat\_readstat_parser.pyx", line 1099, in pyreadstat._readstat_parser.run_conversion

  File "pyreadstat\_readstat_parser.pyx", line 867, in pyreadstat._readstat_parser.run_readstat_parser

  File "pyreadstat\_readstat_parser.pyx", line 797, in pyreadstat._readstat_parser.check_exit_status

ReadstatError: Invalid file, or file has unsupported features

有人知道问题出在哪里吗?我想可能是我正在试用的.sav的结构很奇怪,但它的结构很正常。
.sav本身为451 KB
我试着用一个简单的.sav文件,它像预期的那样工作。我试着用主代码,它不工作。我希望它至少把.sav变成一个python/pandas Dataframe ,然后变成一个.csv

dldeef67

dldeef671#

这是解决方案,我希望它会有帮助。

import pandas as pd
import numpy as np
import os

# Set the working directory
os.chdir("C:/Users/Desktop/")

# Read the .sav file
df = pd.read_spss("file.sav")

# Print the dataframe
print(df)

# Write the .csv file
df.to_csv("file.csv")
5q4ezhmt

5q4ezhmt2#

我找到了这个...
它被认为是数据是按观测顺序排列的,例如,第一次观测的所有变量值,后面是第二次观测的所有值,等等。数据记录的格式根据文件头记录中的压缩代码而变化。.sav文件的数据部分可以被解压缩:

code 0: compressed by bytecode

我建议使用上下文管理器来读取文件,以避免.sav文件压缩的怪异。
此外...以下是pyreadstat.read_sav()方法的参数:
encoding(str,optional)-默认为None。如果设置,系统将使用定义的编码而不是猜测。它必须是与iconv兼容的名称
您的编码选项为['ASCII','EBCDIC','utf-8']

with pyreadstat.read_sav('./RaceDatas.sav', encoding='utf-8') as savfile:
    savfile.to_csv('BloodRace.csv', index=False)

data = pyreadstat.read_sav('./RaceDatas.sav', encoding='ASCII')
df = data[0]
meta = data[1]

相关问题