python - 如何使用 .SAS 或 SPS 元数据文件将 CSV 读取为 Pandas 数据框?
问题描述
我有一个很大的 CSV 文件,它带有两个元数据描述文件。一个有.sas
扩展名,另一个有.sps
. 打开它们,它们描述了 CSV 数据格式和类别。这些文件描述了每列的数据格式和可能的类别。例如,值为 1 或 2 的列映射到yes和no。
如何使用这些元数据文件来帮助我阅读 CSV 文件?
我可以使用 read_csv 轻松阅读它,但这些文件对于自动创建包含可能类别的列很有用。我可以为它们创建一个解析器,但必须有一个包或函数来完成它。也许我没有使用正确的搜索词。
这是.sas
文件(对不起,它是葡萄牙语):
proc format;
Value $SG_AREA
CH='Ciךncias Humanas'
CN='Ciךncias da Natureza'
LC='Linguagens e Cףdigos'
MT='Matemבtica';
Value $TP_LINGUA
0='Inglךs'
1='Espanhol';
Value $IN_ITEM_ADAPTADO
0='Nדo'
1='Sim';
DATA WORK.ITENS_2018;
INFILE 'C:\ITENS_PROVA_2018.csv' /*local do arquivo*/
LRECL=33
FIRSTOBS=2
DLM=';'
MISSOVER
DSD ;
INPUT
CO_POSICAO : BEST2.
SG_AREA : $CHAR2.
CO_ITEM : BEST6.
TX_GABARITO : $CHAR1.
CO_HABILIDADE : BEST2.
TX_COR : $CHAR7.
CO_PROVA : BEST3.
TP_LINGUA : $CHAR1.
IN_ITEM_ADAPTADO : $CHAR1. ;
ATTRIB SG_AREA FORMAT = $SG_AREA20.;
ATTRIB TP_LINGUA FORMAT = $TP_LINGUA8.;
ATTRIB IN_ITEM_ADAPTADO FORMAT = $IN_ITEM_ADAPTADO3.;
LABEL
CO_POSICAO='Posiחדo do Item na Prova'
SG_AREA='ֱrea de Conhecimento do Item'
CO_ITEM='Cףdigo do Item'
TX_GABARITO='Gabarito do Item'
CO_HABILIDADE='Habilidade do Item'
TX_COR='Cor da Prova'
CO_PROVA='Identificador da Prova'
TP_LINGUA='Lםngua Estrangeira '
IN_ITEM_ADAPTADO='Item pertencente א prova adaptada para Ledor'
;RUN;
在这里您可以看到等效.sps
文件:
GET DATA
/TYPE=TXT
/FILE= "C:\ITENS_PROVA_2018.csv" /*local do arquivo*/
/DELCASE=LINE
/DELIMITERS=";"
/ARRANGEMENT=DELIMITED
/FIRSTCASE=2
/IMPORTCASE= ALL
/VARIABLES=
CO_POSICAO F2.0
SG_AREA A2
CO_ITEM F6.0
TX_GABARITO A1
CO_HABILIDADE F2.0
TX_COR A7
CO_PROVA F3.0
TP_LINGUA A1
IN_ITEM_ADAPTADO A1.
CACHE.
EXECUTE.
DATASET NAME ITENS_18 WINDOW=FRONT.
VARIABLE LABELS
CO_POSICAO Posiחדo do Item na Prova
SG_AREA ֱrea de Conhecimento do Item
CO_ITEM Cףdigo do Item
TX_GABARITO Gabarito do Item
CO_HABILIDADE Habilidade do Item
TX_COR Cor da Prova
CO_PROVA Identificador da Prova
TP_LINGUA Lםngua Estrangeira
IN_ITEM_ADAPTADO Item pertencente א prova adaptada para Ledor.
VALUE LABELS
SG_AREA
"CH" Ciךncias Humanas
"CN" Ciךncias da Natureza
"LC" Linguagens e Cףdigos
"MT" Matemבtica
/TP_LINGUA
0 Inglךs
1 Espanhol
/IN_ITEM_ADAPTADO
0 Nדo
1 Sim.
您可以看到它们描述了每一列的元数据。
解决方案
.sas 是 SAS 的程序文件扩展名,旨在通过 SAS 使用。它本质上是一个用作字典文件的命令文件。
.sps 是 SPSS 的程序文件扩展名,旨在通过 SPSS 使用。它本质上是一个用作字典文件的命令文件。我也会在这里提供一个方便的链接,但 SPSS 是 IBM 产品,他们的文档是一个地狱般的风景,任何人都不应该涉足。
尽管如此,您尝试做的事情应该是可能的。Pandas 本身是不够的,因为它没有内置功能来解决这些情况。Pandas 对 SAS 的支持仅扩展到 .sas7bdat 数据文件,而对 SPSS 的支持仅扩展到 .sav 数据文件。
Python(和 Pandas)可以读取 .sas 和 .sps 扩展名,因为它们是纯文本文件,但实际上不能对它们做任何事情。
您可以通过以下两条途径获得您所追求的东西。
1) 在试用版上安装 SAS 或 SPSS,用它来读取数据,然后以另一种格式导出。
2) 安装并尝试使用 Pandas 的 pyreadstat 扩展。
听起来 pandas 框架是您的偏好,要使其工作,您需要扩展它的功能。在这种情况下,使用pyreadstat扩展。它旨在处理 SAS 和 SPSS 数据文件,并且比 pandas 本身处理它们的效率要高得多。此解决方案附带一个警告。
Pyreadstat 本身就是 ReadStat 的转换。引用 pyreadstat 自述文件:
This module is a wrapper around the excellent Readstat C library by Evan Miller.
Readstat is the library used in the back of the R library Haven,
meaning pyreadstat is a python equivalent to R Haven.
如果您只查看 pyreadstat 文件,您通常不会发现任何涉及 .sas 或 .sps 或字典文件的内容。相反,您需要查看此处找到的 ReadStat 的自述文件。它有一节专门涵盖此类情况。
到目前为止,我还没有测试 pyreadstat 中字典文件存在的 ReadStat 命令和函数,所以这有可能不起作用。
如果您尝试此解决方案但它失败了,请跟进该线程,我将帮助您进行故障排除。
推荐阅读
- c - 如何修复glad.c中对符号'dlclose@@GLIBC_2.2.5'的未定义引用
- r - 如何用其他两个数据框替换数据框的 NA 元素
- vba - VBA 无法创建到远程 SQL 数据库的连接
- ruby - 如何使用 rbenv 安装特定版本的 ruby (1.8.6)?
- vue.js - 如何使屏幕阅读器可以访问 Vue Multiselect?
- python - 使用 CSV 文件的 Matplotlib 多线图
- c# - 从视图组件实例中获取传递的 ViewBag 数据(例如在测试中)
- scala - Spark 结构化流 - UNION 两个或多个流源
- javascript - 如何在不访问 HTML 的情况下添加类
- python - 什么是 numpy.trace 中的“偏移”参数?