解决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 list删除元素时要注意的坑点分享
Apr 18 Python
Python爬虫常用库的安装及其环境配置
Sep 19 Python
Python2.7版os.path.isdir中文路径返回false的解决方法
Jun 21 Python
Python 多线程其他属性以及继承Thread类详解
Aug 28 Python
python树的同构学习笔记
Sep 14 Python
tensorflow 实现自定义layer并添加到计算图中
Feb 04 Python
Django 项目通过加载不同env文件来区分不同环境
Feb 17 Python
pycharm 添加解释器的方法步骤
Aug 31 Python
python实现控制台输出颜色
Mar 02 Python
用python自动生成日历
Apr 24 Python
Anaconda安装pytorch及配置PyCharm 2021环境
Jun 04 Python
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
Apr 14 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/01/02 PHP
php中字符集转换iconv函数使用总结
2014/10/11 PHP
简单了解WordPress开发中update_option()函数的用法
2016/01/11 PHP
PHP单例模式简单用法示例
2017/06/23 PHP
PhpStorm2020 + phpstudyV8 +XDebug的教程详解
2020/09/17 PHP
JavaScript Cookie的读取和写入函数
2009/12/08 Javascript
javascript 快速排序函数代码
2012/05/30 Javascript
javascript初学者常用技巧
2014/09/02 Javascript
DOM基础教程之使用DOM控制表格
2015/01/20 Javascript
JS实现仿中关村论坛评分后弹出提示效果的方法
2015/02/23 Javascript
javascript控制层显示或隐藏的方法
2015/07/22 Javascript
jQuery基于json与cookie实现购物车的方法
2016/04/15 Javascript
jQuery简单自定义图片轮播插件及用法示例
2016/11/21 Javascript
JavaScript实现格式化字符串函数String.format
2016/12/16 Javascript
微信小程序侧边栏滑动特效(左右滑动)
2017/01/23 Javascript
文本溢出插件jquery.dotdotdot.js使用方法详解
2017/06/22 jQuery
angular学习之从零搭建一个angular4.0项目
2017/07/10 Javascript
vue生成随机验证码的示例代码
2017/09/29 Javascript
JS手机端touch事件计算滑动距离的方法示例
2017/10/26 Javascript
vue-router实现组件间的跳转(参数传递)
2017/11/07 Javascript
js实现计时器秒表功能
2019/12/16 Javascript
JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记
2020/07/15 Javascript
vue3.0中setup使用(两种用法)
2020/12/02 Vue.js
Python基础知识_浅谈用户交互
2017/05/31 Python
python创造虚拟环境方法总结
2019/03/04 Python
Tensorflow与Keras自适应使用显存方式
2020/06/22 Python
Python 代码调试技巧示例代码
2020/08/11 Python
借助HTML5 Canvas API制作一个简单的猜字游戏
2016/03/25 HTML / CSS
html5给汉字加拼音加进度条的实现代码
2020/04/07 HTML / CSS
解释一下ruby中的特殊方法与特殊类
2013/02/26 面试题
编辑个人求职信范文
2013/09/21 职场文书
党员教师自我剖析材料
2014/09/29 职场文书
酒店总经理岗位职责
2015/04/01 职场文书
《1942》观后感
2015/06/08 职场文书
十大经典日本动漫排行榜 海贼王第三,犬夜叉仅第八
2022/03/18 日漫
Android Studio实现简易进制转换计算器
2022/05/20 Java/Android