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


Posted in Python onMay 10, 2018

问题出现与解决

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数组的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Pandas之Fillna填充缺失数据的方法
Jun 25 Python
python flask 如何修改默认端口号的方法步骤
Jul 12 Python
在django view中给form传入参数的例子
Jul 19 Python
使用python实现unix2dos和dos2unix命令的例子
Aug 13 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
Sep 17 Python
python 实现绘制整齐的表格
Nov 18 Python
Python中如何将一个类方法变为多个方法
Dec 30 Python
Python多线程threading join和守护线程setDeamon原理详解
Mar 18 Python
为什么说python适合写爬虫
Jun 11 Python
Python pandas对excel的操作实现示例
Jul 21 Python
python 制作简单的音乐播放器
Nov 25 Python
python中xlrd模块的使用详解
Feb 01 Python
解决python3 json数据包含中文的读写问题
May 10 #Python
Python3.6通过自带的urllib通过get或post方法请求url的实例
May 10 #Python
对python3 urllib包与http包的使用详解
May 10 #Python
Python3处理HTTP请求的实例
May 10 #Python
python字符串与url编码的转换实例
May 10 #Python
Python中的单继承与多继承实例分析
May 10 #Python
python3处理含有中文的url方法
May 10 #Python
You might like
php 读取shell管道传输过来的内容
2010/03/01 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
调试php程序的简单步骤
2019/10/04 PHP
JS实现简单的顶部定时关闭层效果
2014/06/15 Javascript
jQuery在ul中显示某个li索引号的方法
2015/03/17 Javascript
Bootstrap进度条组件知识详解
2016/05/01 Javascript
Node.js的基本知识简单汇总
2016/09/19 Javascript
js时间戳格式化成日期格式的多种方法介绍
2017/02/16 Javascript
微信小程序之获取当前位置经纬度以及地图显示详解
2017/05/09 Javascript
js图片放大镜实例讲解(必看篇)
2017/07/17 Javascript
浅谈angular4生命周期钩子
2017/09/05 Javascript
实现两个文本框同时输入的实例
2017/09/25 Javascript
JS实现十字坐标跟随鼠标效果
2017/12/25 Javascript
Vue+Element实现动态生成新表单并添加验证功能
2019/05/23 Javascript
javascript中的this作用域详解
2019/07/15 Javascript
解决layer弹出层自适应页面大小的问题
2019/09/16 Javascript
JS页面获取 session 值,作用域和闭包学习笔记
2019/10/16 Javascript
微信小程序swiper使用网络图片不显示问题解决
2019/12/13 Javascript
node实现mock-plugin中间件的方法
2019/12/25 Javascript
通过JS判断网页是否为手机打开
2020/10/28 Javascript
Python的Django框架中使用SQLAlchemy操作数据库的教程
2016/06/02 Python
Python快速排序算法实例分析
2017/11/29 Python
python 实现二维列表转置
2019/12/02 Python
python如何保存文本文件
2020/06/07 Python
python实现npy格式文件转换为txt文件操作
2020/07/01 Python
关于解决iframe标签嵌套问题的解决方法
2020/03/04 HTML / CSS
以特惠价提供在线奢侈品购物:FRMODA.com
2018/01/25 全球购物
eBay澳大利亚站:eBay.com.au
2018/02/02 全球购物
毕业生简单求职信
2013/11/19 职场文书
护理实习自我鉴定
2013/12/14 职场文书
给女朋友的道歉信
2014/01/10 职场文书
学生吸烟检讨书
2014/09/14 职场文书
圣诞晚会主持词
2015/07/01 职场文书
Python实战之实现康威生命游戏
2021/04/26 Python
在Python 中将类对象序列化为JSON
2022/04/06 Python
Redis数据同步之redis shake的实现方法
2022/04/21 Redis