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

 更新时间:2018年05月10日 16:33:49   作者:FontTian  
今天小编就为大家分享一篇解决Pandas to_json() 中文乱码,转化为json数组的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

问题出现与解决

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

以下是原文的额外内容,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数组的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • numpy.reshape(-1,1)的具体使用

    numpy.reshape(-1,1)的具体使用

    本文主要介绍了numpy.reshape(-1,1)的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • python pyaudio音频录制的实现

    python pyaudio音频录制的实现

    这篇文章主要介绍了python pyaudio音频录制的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • 基于Python实现Hash算法

    基于Python实现Hash算法

    这篇文章主要介绍了基于Python实现Hash算法,最简单的hash算法是用取余的方式,根据hash地址存放数据,这需要提供键值对Key地址,value是存放的数据,下文相关内容需要的小伙伴可以参考一下
    2022-03-03
  • python pip如何手动安装二进制包

    python pip如何手动安装二进制包

    这篇文章主要介绍了python pip如何手动安装二进制包,帮助大家更好的进行python开发,感兴趣的朋友可以了解下
    2020-09-09
  • Django项目之Elasticsearch搜索引擎的实例

    Django项目之Elasticsearch搜索引擎的实例

    今天小编就为大家分享一篇Django项目之Elasticsearch搜索引擎的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • Python实现带图形界面的炸金花游戏

    Python实现带图形界面的炸金花游戏

    诈金花又叫三张牌,是在全国广泛流传的一种民间多人纸牌游戏,它具有独特的比牌规则。本文将通过Python语言实现带图形界面的诈金花游戏,需要的可以参考一下
    2022-12-12
  • django框架基于queryset和双下划线的跨表查询操作详解

    django框架基于queryset和双下划线的跨表查询操作详解

    这篇文章主要介绍了django框架基于queryset和双下划线的跨表查询操作,结合实例形式详细分析了Django框架queryset和双下划线的跨表查询相关实现技巧与操作注意事项,需要的朋友可以参考下
    2019-12-12
  • web.py获取上传文件名的正确方法

    web.py获取上传文件名的正确方法

    这篇文章主要介绍了web.py获取上传文件名的正确方法,遇到这个问题的朋友可能会困惑半天,使用本文的正确方法就可以解决这个问题了,需要的朋友可以参考下
    2014-08-08
  • Python3.6 之后字典是有序的?

    Python3.6 之后字典是有序的?

    字典数据是有序的, 但是这个序不是由外部控制, 而是内部字典定位机制的序 所以对外来讲, 数据本身是无序的 你每次遍历的顺序一样, 是因为枚举结果是按内部排序输出 而无序则表示在你无法从外部控制最终的输出顺序,下面我们来学习Python字典有序性的相关资料又当怎样吧
    2021-12-12
  • 使用python爬取taptap网站游戏截图的步骤

    使用python爬取taptap网站游戏截图的步骤

    这篇文章主要介绍了使用python爬取taptap游戏截图的步骤,帮助大家更好的理解和学习使用python进行爬虫,感兴趣的朋友可以了解下
    2021-05-05

最新评论