首页 > 解决方案 > 使用 Python 为 SAS 数据集生成 JSON 文件

问题描述

我的输入数据是 SAS 数据集,样本数据

    编号 b'401200262'
    政策编号 746346
    出生 1960-09-23 00:00:00
    家庭儿童 0
    杨洋
    收入 NaN
    PARENT1 b'否'
    HOME_VAL 252896
    MSTATUS b'是'
    性别 b'M'
    教育b'Bachelors'
    政策 2
    URBANICITY b'高度城市化/城市化'
    AGE_BAND b'51 - 65'
    CREDIT_SCORE_BAND b'750 +'
    童车 0
    开始 1988-05-12 00:00:00
    PLCY日期 2001-04-07 00:00:00
    第1554章
    CLM_FREQ 5
    已撤销 b'No'
    MVR_PTS 1
    CLM_AMT 0
    CLM_DATE NaT
    CLAIM_FLAG 0
    州 b'IL'
    TRAVTIME 14.472
    CAR_USE b'商业'
    蓝皮书 28560
    CAR_TYPE b'面板卡车'
    RED_CAR 是的
    车龄 10
    TIF 104
    职业b'专业'
    2001年PLC年
    CLM_EXPOSURE 1
    LN_CLM_EXPOSURE 0
    CUST_LOYALTY 12.9024
    BLUEBOOK_1000 28.56

我正在尝试为以下示例中的特定记录生成 REST API JSON 格式,我选择了第二行:

    import pandas as pd
    sasdt = pd.read_sas("c:\hmeq.sas7bdat")
    dfs = [] # holds data chunks
    dfs2=sasdt.loc[2]
    for chunk in sasdt:
        print('{"name":"',chunk,'_","value":',)

我无法生成我想要的这样的输出:你能帮我吗?

期望的输出

标签: pythonjsonsas

解决方案


试试这个:

import pandas as pd
import numpy
import json

sasdt = pd.read_sas('airline.sas7bdat')
dfs2 = sasdt.loc[2]

# avoid json.dumps raise "TypeError: Object of type 'int64' is not JSON serializable"
dfs2_values = [int(i) if type(i) == numpy.int64 else i for i in dfs2]

inputs = pd.DataFrame({'name':dfs2.index.to_list(), 'value':dfs2_values}).to_dict(orient='records')
json.dumps({'inputs':inputs})

你会得到这样的输出:

'{"inputs": [{"name": "YEAR", "value": 1950.0}, {"name": "Y", "value": 1.569000005722046}, {"name": "W", "value": 0.27799999713897705}, {"name": "R", "value": 0.3156999945640564}, {"name": "L", "value": 1.3880000114440918}, {"name": "K", "value": 0.5730000138282776}]}'

推荐阅读