问题出现与解决
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() 保存文件
以上这篇解决Pandas to_json()中文乱码,转化为json数组的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。
本文向大家介绍python json.dumps中文乱码问题解决,包括了python json.dumps中文乱码问题解决的使用技巧和注意事项,需要的朋友参考一下 json.dumps(var,ensure_ascii=False)并不能解决中文乱码的问题 json.dumps在不同版本的Python下会有不同的表现, 注意下面提到的中文乱码问题在Python3版本中不存在。 注:下面的代码再py
本文向大家介绍解决java转义json出现\u0000 等乱码的问题,包括了解决java转义json出现\u0000 等乱码的问题的使用技巧和注意事项,需要的朋友参考一下 今天遇到了String乱码怎么都去不了的问题,最后的解决方法很简单,也不是方法的问题,是数据过滤之后进行的数据处理,在处理阶段生成了乱码,难怪我在过滤阶段怎么去都去不掉- -,不过花时间知道了很多处理乱码的方法,在这里记录一下。
本文向大家介绍Mac Mysql数据库中文乱码问题解决,包括了Mac Mysql数据库中文乱码问题解决的使用技巧和注意事项,需要的朋友参考一下 Mac 下MySQL数据库中文乱码解决方案: 当我们用框架进行数据库的存储操作时,经常会遇到中文乱码的问题。 如:在使用Java中得SSH框架时,我们需要在web.xml文件中配置编码的filter,具体代码是: 然后进行数据库存储的时候发现存储到数据库的
本文向大家介绍解决springmvc+mybatis+mysql中文乱码问题,包括了解决springmvc+mybatis+mysql中文乱码问题的使用技巧和注意事项,需要的朋友参考一下 近日使用ajax请求springmvc后台查询mysql数据库,页面显示中文出现乱码 最初在mybatis配置如下 其中表News的text字段为blob类型 如此查出的text值在控制台中一直显示乱码。 之后g
本文向大家介绍SqlServer数据库中文乱码问题解决方法,包括了SqlServer数据库中文乱码问题解决方法的使用技巧和注意事项,需要的朋友参考一下 问题:创建新数据库,存入中文显示乱码??? 原因分析:SQL版的乱码问题还是出现在SQL SERVER的安装设置上。默认安装时系统默认的排序规则是拉丁文的排序规则,但一般人在安装时没有考虑到这一点,安装时只是点取下一步,安装完成后,造成了SQL版在
本文向大家介绍PHP使用strrev翻转中文乱码问题的解决方法,包括了PHP使用strrev翻转中文乱码问题的解决方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP使用strrev翻转中文乱码问题的解决方法。分享给大家供大家参考,具体如下: 在用PHP中的strrve翻转中文时,会出现乱码情况 例如: 运行结果为: 解决方法就是自己重写一个cnstrrev的函数 运行结果为: 更多