记录一个json dumps的对象中包含dataframe元素的错误

问题

代码如下:

import pandas as pd
import json


def a():
    df = pd.DataFrame([[31, 'bob'], [21, 'alex']], index=['row_1', 'row_2'], columns=['age', 'name'])
    print(df)
    b(df)
    print("over")


def b(df):
    data = []
    data.append({'class': 'a', 'age': df.at['row_1', 'age']})
    data.append({'class': 'a', 'age': df.at['row_1', 'age']})
    print(data)
    data_json = json.dumps(data)
    print("data to json")


if __name__ == '__main__':
    a()

在函数b中,从dataframe df中取一个元素的值,和其他数据一起组成dict,两个dict再组成一个list。然后对这个list 进行json.dumps 操作。

期间,我们将df和data打印出来,如下,看起来都没有问题

df:
       age  name
row_1   31   bob
row_2   21  alex

data:
[{'class': 'a', 'age': 31}, {'class': 'a', 'age': 31}]

但是在执行代码的时候就会报错

 raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type int64 is not JSON serializable

报错在

data_json = json.dumps(data)

 

粗看data没有任何问题,list里有两个元素,每个元素一个dict。把data print出来的内容直接copy出来单独执行json.dumps也没有问题。但是一放到程序中执行就有问题了。

原因:

后来发现原因在于从dataframe中取元素的时候

 

df.at['row_1', 'age']

取出来的不是int,而是numpy.int64。 所以会报错TypeError: Object of type int64 is not JSON serializable。 

解决办法:

一个最简单的解决办法就是将他转成int,

data.append({'class': 'a', 'age': int(df.at['row_1', 'age'])})

这样就没有问题了:

       age  name
row_1   31   bob
row_2   21  alex
[{'class': 'a', 'age': 31}, {'class': 'a', 'age': 31}]
data to json
over

其他方法可以查其他资料啦。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值