欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

解决Pandas to_json()中文乱码,转化为json数组的问题

程序员文章站 2022-10-08 20:12:18
问题出现与解决 pandas进行数据处理之后,假如想将其转化为json,会出现一个bug,就是中文文字是以乱码存储的,也就是\uxxxxxx的形式,翻了翻官网文档,查了源...

问题出现与解决

pandas进行数据处理之后,假如想将其转化为json,会出现一个bug,就是中文文字是以乱码存储的,也就是\uxxxxxx的形式,翻了翻官网文档,查了源码的参数,(多谢网友提醒)需要设置js001 = df1.to_json(force_ascii=false),即可显示中文编码

解决Pandas to_json()中文乱码,转化为json数组的问题

以下是原文的额外内容,dataframe 转化为json数组

于是决定自己写一个.首先用demojson的类库尝试了一下,不行,依旧编码问题.之后考虑python 原生的 json 应该有编码转换功能,查了查官网文档,确实可以,不过要比平时多加一个参数

listxy_json = json.dumps(listxy, sort_keys=true, indent=4, ensure_ascii=false) #ensure_ascii:默认值true,如果数据中含有非ascii的字符,则会类似\uxxxx的显示数据,设置成false后,就能正常显示

既然找到解决乱码的方法,那么想要将pandas中的数据类型存储到json中就只需要先将其转换为python自带的数据类型,再利用 json 类库其转换为json格式并存储就可以了,因为我自己是为了将python处理好的数据转换为json数组,然后利用echarts生成表格,所以我将其封装为了一个类,源码在最后

存储的的json前后对比

df1 = pd.dataframe(pd.read_excel(u'excel/袁隆平院士报告处理后.xlsx'))
js001 = df1.to_json(force_ascii=false)
with open('json/testjson.json', 'w') as f:
 f.write(js001)
# "16":6,"17":6,"18":3,"19":4},"content":{"0":"研究调改王玉田院士项目入驻协议,完成签约仪式方案","1":"\u5b
#处理后
df1 = pd.dataframe(pd.read_excel(u'excel/袁隆平院士报告处理后.xlsx'))
dfts = dataframetojsonarray(df1, 'json/wyt_xyz.json') # 参数(df数据,文件存储路径)
dfts.funchangedataframetype() # 自动转换dataframe的列数据类型
dfts.funsavejsonarrayfile() # 存储json格式文件
# [["2016-08-08", "袁隆平院士观摩指导"], ["2016-08-09","修改完善袁隆平院士项目合作协议"],["2016-08-10","完成袁隆平院士合作协议"],["2016-08-31","袁隆平院士项目入驻院士港协议审核完毕"],....]

dataframetojsonarray()源码

# - * - coding: utf - 8 -*-
#
# 作者:田丰(fonttian)
# 创建时间:'2017/7/16'
# 邮箱:fonttian@gmaill.com
# csdn:http://blog.csdn.net/fontthrone
import sys
import pandas as pd
import json
import re
reload(sys)
sys.setdefaultencoding('utf-8')
class dataframetojsonarray():
  def __init__(self, dataframe, filepath='dataframetojsonarrayfile.json'):
    self.__dataframe = dataframe
    self.__filepath = filepath
  def funchangedataframetype(self):
    for i in range(len(self.__dataframe.columns)):
      s = re.sub(r'\'>', '', re.sub(r'\d', '', str(type(self.__dataframe.iloc[:, i][0])))).replace('\'', ' ').replace('.',
                                                        ' ').split(
        ' ')[-1]
      if s == 'timestamp':
        self.__dataframe.iloc[:, i] = self.__dataframe.iloc[:, i].astype(unicode)
      else:
        self.__dataframe.iloc[:, i] = self.__dataframe.iloc[:, i].astype(s)
    return self.__dataframe
  def funsavejsonarrayfile(self):
    list001 = []
    for i in range(len(self.__dataframe.columns)):
      list001.append(list(self.__dataframe.iloc[:, i]))
    list002 = []
    list003 = []
    for i in range(len(list001[0])):
      for j in range(len(self.__dataframe.columns)):
        list003.append(list001[j][i])
      list002.append(list003)
      list003 = []
    final_json = json.dumps(list002, sort_keys=true, indent=4, ensure_ascii=false)
    with open(self.__filepath, 'w') as f:
      f.write(final_json)
    return final_json

def init(self, dataframe, filepath='dataframetojsonarrayfile.json') dataframe需要传入的数据,filepath,json文件存储路径

funchangedataframetype() 自动转换dataframe数据类型,返回转换后的dataframe

funsavejsonarrayfile() 保存文件

以上这篇解决pandas to_json()中文乱码,转化为json数组的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。