Pandas to_json() 中文乱码,转化为json数组

原创 2017年07月16日 22:43:31

问题出现与解决

Pandas进行数据处理之后,假如想将其转化为json,会出现一个bug,就是中文文字是以乱码存储的,也就是\uXXXXXX的形式,翻了翻官网文档,查了源码的参数,(多谢网友提醒)需要设置js001 = df1.to_json(force_ascii=False),即可显示中文编码

这里写图片描述

以下是原文的额外内容,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() 保存文件
版权声明:转载请标明出处:http://blog.csdn.net/fontthrone,也请保留该信息

使用pandas读写JSON

利用JSON字符串创建一个pandas Series。pandas提供的read_json()函数,可以用来创建pandas Series或者pandas DataFrame数据结构 In [1]: ...

pandas.DataFrame.to_json按行转json

最近需要将csv文件转成DataFrame并以json的形式展示到前台,故需要用到Dataframe的to_json方法 to_json方法默认以列名为键,列内容为值,形成{col1:[v11,...
  • huanbia
  • huanbia
  • 2017年05月24日 11:32
  • 2833

pandas 解析json文件为DataFrame的三种方式以及其灵活度和效率的比较

我所了解到的,将json串解析为DataFrame的方式主要有一样三种: 利用pandas自带的read_json直接解析字符串 利用json的loads和pandas的json_normalize...

python csv 格式文件 中文乱码问题解决方法

我遇到的问题是使用pandas的DataFrame to_csv方法实现csv文件输出,但是遇到中文乱码问题,已验证的正确的方法是: df.to_csv("cnn_predict_result....

Pandas之Dataframe操作

创建一个DataFrame,它有几种创建方式: 列表,序列(pandas.Series), numpy.ndarray的字典二维numpy.ndarray别的DataFrame结构化的记录(st...

Python操作中出现中文乱码等问题

1.代码开始:#-*-coding:utf-8 -*-2.读写csv或者excel文件 pandas读取CSV文件,中文出现乱码: a. 设置encoding=’gbk’或者encoding=’ut...

python 转换为json时候 汉字编码问题

有这样一个需求:       需要一个json 文件 数据从数据库里查询出来 1. 设置文件头 # -*- coding:utf-8 -*- 2. 连接数据库 将数据库连接数据库的编码...

读取json格式为DataFrame(可转为.csv)

有时候需要读取一定格式的json文件为DataFrame,可以通过json来转换或者pandas中的read_csv()。import pandas as pd import jsondata = D...

Pandas学习(一)——数据的导入

本文所有的环境:python :3.5 pandas:0.19.2 numpy:1.12.1 如果你的环境和这样不一样可能会有 细微差别。pandas支持的数据格式pandas作为一个强大的数据处...
  • hjxzb
  • hjxzb
  • 2017年04月25日 10:45
  • 4319

关于http接口开发中json格式数据编码问题处理

关于http接口开发中json格式数据编码问题处理 在实际工作中,接口很多时候返回json格式,但有时返回的格式会有编码问题....
  • 5iasp
  • 5iasp
  • 2013年09月02日 17:02
  • 9426
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Pandas to_json() 中文乱码,转化为json数组
举报原因:
原因补充:

(最多只允许输入30个字)