解决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 相关文章推荐
10个易被忽视但应掌握的Python基本用法
Apr 01 Python
python3序列化与反序列化用法实例
May 26 Python
python2.7+selenium2实现淘宝滑块自动认证功能
Feb 24 Python
tensorflow 用矩阵运算替换for循环 用tf.tile而不写for的方法
Jul 27 Python
python3 flask实现文件上传功能
Mar 20 Python
python 产生token及token验证的方法
Dec 26 Python
使用Django2快速开发Web项目的详细步骤
Jan 06 Python
Python matplotlib画曲线例题解析
Feb 07 Python
django的模型类管理器——数据库操作的封装详解
Apr 01 Python
Django如何使用redis作为缓存
May 21 Python
对pytorch中x = x.view(x.size(0), -1) 的理解说明
Mar 03 Python
使用python求解迷宫问题的三种实现方法
Mar 17 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的朋友 经常问的一些问题。不断更新
2011/08/11 PHP
php使用反射插入对象示例分享
2014/03/11 PHP
Thinkphp中import的几个用法详细介绍
2014/07/02 PHP
php抽象类用法实例分析
2015/07/07 PHP
window.open被浏览器拦截后的自定义提示效果代码
2007/11/19 Javascript
基于Jquery插件开发之图片放大镜效果(仿淘宝)
2011/11/19 Javascript
JavaScript高级程序设计 阅读笔记(十二) js内置对象Math
2012/08/14 Javascript
jquery SweetAlert插件实现响应式提示框
2015/08/18 Javascript
学习JavaScript设计模式之中介者模式
2016/01/14 Javascript
Javascript之深入浅出prototype
2017/02/06 Javascript
jQuery实用密码强度检测
2017/03/02 Javascript
js实现放大镜特效
2017/05/18 Javascript
js编写简单的聊天室功能
2017/08/17 Javascript
JS对象序列化成json数据和json数据转化为JS对象的代码
2017/08/23 Javascript
利用javascript如何随机生成一定位数的密码
2017/09/22 Javascript
浅谈Node模块系统及其模式
2017/11/17 Javascript
微信小程序使用audio组件播放音乐功能示例【附源码下载】
2017/12/08 Javascript
RxJS的入门指引和初步应用
2019/06/15 Javascript
python使用htmllib分析网页内容的方法
2015/05/08 Python
shelve  用来持久化任意的Python对象实例代码
2016/10/12 Python
django认证系统实现自定义权限管理的方法
2018/07/16 Python
一文带你了解Python中的字符串是什么
2018/11/20 Python
python获取整个网页源码的方法
2020/08/03 Python
html5-websocket基于远程方法调用的数据交互实现
2012/12/04 HTML / CSS
html5拖曳操作 HTML5实现网页元素的拖放操作
2013/01/02 HTML / CSS
HTML5中图片之间的缝隙完美解决方法
2017/07/07 HTML / CSS
介绍java中初始化块的使用
2012/09/11 面试题
static函数与普通函数有什么区别
2015/12/25 面试题
金士达面试非笔试
2012/03/14 面试题
C#如何允许一个类被继承但是避免这个类的方法被重载?
2015/02/24 面试题
奥林匹克的口号
2014/06/13 职场文书
有限责任公司股东合作协议书范本
2014/10/30 职场文书
2015年计算机教学工作总结
2015/07/22 职场文书
Go语言基础知识点介绍
2021/07/04 Golang
我家女友可不止可爱呢 公开OP主题曲无字幕动画MV
2022/04/11 日漫
Linux安装Docker详细教程
2022/07/07 Servers