(dict类)不是JSON可序列化的

2024-04-20 13:06:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将用Python 2编写的代码更新为Python 3。这段代码从文件中读取数据,然后进行一些数据处理

RecordID,SAPS-I,SOFA,Length_of_stay,Survival,In-hospital_death
132539,6,1,5,-1,0
132540,16,8,8,-1,0
132541,21,11,19,-1,0
132543,7,1,9,575,0
132545,17,2,4,918,0

错误指向此部分:

            try:
            print("trying to parse ID")
            print(type(id_))
            parse_id(id_)

并且它执行parse_id

label = out.loc[int(id_)]
rec = {'label': label}

rec['forward'] = parse_rec(values, masks, evals, eval_masks, dir_='forward')
rec['backward'] = parse_rec(values[::-1], masks[::-1], evals[::-1], eval_masks[::-1], dir_='backward')
print("reached json.dumps")
print(type(rec))
rec = json.dumps(rec)
print("after dump")

fs.write(rec + '\n')

parse_id正在执行parse_rec

def parse_rec(values, masks, evals, eval_masks, dir_):
    deltas = parse_delta(masks, dir_)

    # only used in GRU-D
    forwards = pd.DataFrame(values).fillna(method='ffill').fillna(0.0).to_numpy() #changed as_matrix to .values

    rec = {}

    rec['values'] = np.nan_to_num(values).tolist()
    rec['masks'] = masks.astype('int32').tolist()
    # imputation ground-truth
    rec['evals'] = np.nan_to_num(evals).tolist()
    rec['eval_masks'] = eval_masks.astype('int32').tolist()
    rec['forwards'] = forwards.tolist()
    rec['deltas'] = deltas.tolist()

    return rec

因此{}、{}、{}和{}是:<;类“numpy.ndarray”>

下面是错误:

trying to parse ID
<class 'str'>
reached json.dumps
<class 'dict'>
0 is not JSON serializable

我尝试了堆栈上建议的不同方法,例如.decode('utf-8'),但它们不适合类str数据类型。 这是rec值的一部分

{'label': 0, 'forward': {'values': [[0.0, -0.49034524123312234, 0.0, 0.0, 1.6507596063107246, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.46547721054525065, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1.1109460541475529, 0.0, 0.5392164059229704, 0.0, 0.0, 0.0, 0.0, 0.0, -0.09444392939859172, 1.4748633585670563, 0.0, 0.0], [0.0, 0.5214635171496661, -0.3991306007085636, -0.6247258127605516, 2.0491463305338438, 0.0, -1.1073548857099629, 0.0, 

Tags: toidjsonparsedirevallabelforward