解决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中使用PyQt把网页转换成PDF操作代码实例
Apr 23 Python
Python的函数的一些高阶特性
Apr 27 Python
python实现数独算法实例
Jun 09 Python
python线程、进程和协程详解
Jul 19 Python
利用aardio给python编写图形界面
Aug 21 Python
python 实现数字字符串左侧补零的方法
Dec 04 Python
pycharm 实现显示project 选项卡的方法
Jan 17 Python
在Python 中同一个类两个函数间变量的调用方法
Jan 31 Python
Python3标准库总结
Feb 19 Python
python中bytes和str类型的区别
Oct 21 Python
利用keras加载训练好的.H5文件,并实现预测图片
Jan 24 Python
Python中的特殊方法以及应用详解
Sep 20 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增删改查示例自己写的demo
2013/09/04 PHP
PHP中$_SERVER使用说明
2015/07/05 PHP
Zend Framework过滤器Zend_Filter用法详解
2016/12/09 PHP
使用Javascript和DOM Interfaces来处理HTML
2006/10/09 Javascript
jquery tools系列 expose 学习
2009/09/06 Javascript
JavaScript两种跨域技术全面介绍
2014/04/16 Javascript
单元选择合并变色示例代码
2014/05/26 Javascript
Google官方支持的NodeJS访问API,提供后台登录授权
2014/07/29 NodeJs
浅谈javascript函数式编程
2015/09/06 Javascript
图片上传之FileAPI与NodeJs
2017/01/24 NodeJs
详谈$.data()的用法和作用
2017/02/13 Javascript
vue使用$emit时,父组件无法监听到子组件的事件实例
2018/02/26 Javascript
bing Map 在vue项目中的使用详解
2018/04/09 Javascript
JavaScript中变量、指针和引用功能与操作示例
2018/08/04 Javascript
element-ui table span-method(行合并)的实现代码
2018/12/20 Javascript
20多个小事例带你重温ES10新特性(小结)
2019/09/29 Javascript
JS实现水平移动与垂直移动动画
2019/12/19 Javascript
JS如何把字符串转换成json
2020/02/21 Javascript
Vue自动构建发布脚本的方法示例
2020/07/24 Javascript
Python实现单词拼写检查
2015/04/25 Python
Django+JS 实现点击头像即可更改头像的方法示例
2018/12/26 Python
python3中类的继承以及self和super的区别详解
2019/06/26 Python
Python3进制之间的转换代码实例
2019/08/24 Python
最新pycharm安装教程
2020/11/18 Python
SVG实现多彩圆环倒计时效果的示例代码
2017/11/21 HTML / CSS
River Island美国官网:英国高街时尚品牌
2018/09/04 全球购物
澳大利亚厨房和家用电器购物网站:Bing Lee
2021/01/11 全球购物
自荐信范文
2013/12/10 职场文书
2014年大学生社会实践自我鉴定
2014/09/26 职场文书
作风建设剖析材料
2014/10/06 职场文书
构建和谐校园倡议书
2015/01/19 职场文书
春节慰问信范文
2015/02/15 职场文书
医生辞职信范文
2015/03/02 职场文书
python scipy 稀疏矩阵的使用说明
2021/05/26 Python
pytorch 实现在测试的时候启用dropout
2021/05/27 Python
MySQL中varchar和char类型的区别
2021/11/17 MySQL