解决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 相关文章推荐
Python的time模块中的常用方法整理
Jun 18 Python
python+mongodb数据抓取详细介绍
Oct 25 Python
使用TensorFlow实现二分类的方法示例
Feb 05 Python
Python基于opencv调用摄像头获取个人图片的实现方法
Feb 21 Python
详解python读取和输出到txt
Mar 29 Python
python实现在cmd窗口显示彩色文字
Jun 24 Python
python pickle存储、读取大数据量列表、字典数据的方法
Jul 07 Python
Python中新式类与经典类的区别详析
Jul 10 Python
在 Linux/Mac 下为Python函数添加超时时间的方法
Feb 20 Python
Windows10+anacond+GPU+pytorch安装详细过程
Mar 24 Python
Python基于DB-API操作MySQL数据库过程解析
Apr 23 Python
Python Socket编程详解
Apr 25 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数据缓存技术
2007/02/14 PHP
ajax+php控制所有后台函数调用
2015/07/15 PHP
Zend Framework入门知识点小结
2016/03/19 PHP
PHP版本的选择5.2.17 5.3.27 5.3.28 5.4 5.5兼容性问题分析
2016/04/04 PHP
基于jQuery的弹出框插件
2012/03/18 Javascript
JavaScript常用脚本汇总(二)
2015/03/04 Javascript
jQuery插件 Jqplot图表实例
2016/06/18 Javascript
bootstrap PrintThis打印插件使用详解
2017/02/20 Javascript
js实现彩色条纹滚动条效果
2017/03/15 Javascript
Vue单文件组件基础模板小结
2017/08/10 Javascript
解决vue组件中使用v-for出现告警问题及v for指令介绍
2017/11/11 Javascript
浅析vue给不同环境配置不同打包命令
2018/08/17 Javascript
vue实现双向绑定和依赖收集遇到的坑
2018/11/29 Javascript
前端路由&webpack基础配置详解
2019/06/10 Javascript
nodeJs的安装与npm全局环境变量的配置详解
2020/01/06 NodeJs
js 计数排序的实现示例(升级版)
2020/01/12 Javascript
Python获取当前时间的方法
2014/01/14 Python
粗略分析Python中的内存泄漏
2015/04/23 Python
Python3 伪装浏览器的方法示例
2017/11/23 Python
使用pandas对矢量化数据进行替换处理的方法
2018/04/11 Python
Python基于OpenCV实现人脸检测并保存
2019/07/23 Python
Form表单及django的form表单的补充
2019/07/25 Python
Python 用三行代码提取PDF表格数据
2019/10/13 Python
CSS3 渐变(Gradients)之CSS3 径向渐变
2016/07/08 HTML / CSS
html5基础标签(html5视频标签 html5新标签用法)
2013/12/30 HTML / CSS
伦敦时尚生活的缩影:LN-CC
2017/01/24 全球购物
美国领先的水果篮送货公司和新鲜水果供应商:The Fruit Company
2018/02/13 全球购物
美国顶级水上运动专业店:Marine Products
2018/04/15 全球购物
描述JSP和Servlet的区别、共同点、各自应用的范围
2012/10/02 面试题
建筑班组长岗位职责
2014/01/02 职场文书
个人求职自荐信范文
2014/06/20 职场文书
2014年个人教学工作总结
2014/12/09 职场文书
个人自荐书怎么写
2015/03/26 职场文书
事业单位工作人员2015年度思想工作总结
2015/10/15 职场文书
组织委员竞选稿
2015/11/21 职场文书
2019年新郎保证书3篇
2019/10/17 职场文书