解决Pandas to_json()中文乱码,转化为json数组的问题
作者:FontTian 发布时间:2023-12-05 19:06:33
问题出现与解决
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() 保存文件
来源:https://blog.csdn.net/FontThrone/article/details/75212825
猜你喜欢
- 信息图表设计(Inforgraphic Design),是信息设计(Information Design)学科的一个分支,它兴起于20世纪末
- 完美解决“换另一台电脑上用VS2008继续开发web项目时出现 “System.Runtime.InteropServices.COMExc
- 目录主页分析代码:修改视图函数返回值修改 URL 规则修改视图函数名总结追溯到最初,Flask 诞生于 Armin Ronacher 在 2
- 简介Simon Willison来自英国,是一名经验丰富的开发人员。曾工作于Yahoo,是Web开发框架Django的创始人之一,也是Ope
- 我们的每期话题,团队在内部都会通过邮件进行一番讨论,随着讨论的激烈,往往能碰撞出很多有意义的观点,因此,将讨论内容分享出来,有兴趣的朋友可以
- 通配符:通配符描述示例%包含零个或更多字符的任意字符串。WHERE title LIKE '%computer%' 将查找处
- 本文实例为大家分享了OpenCV实现相机标定的具体代码,供大家参考,具体内容如下一、相机与 * 相机模型1.相机模型现代科技加持下的相机已经成
- Hello,Everyone!Python是个好东西!好吧,以黎某人这寒碜的赞美之词,实在上不了台面,望见谅。那我们直接来上干货吧。第一步:
- 首先说明一下,在python中是没有&&及||这两个运算符的,取而代之的是英文and和or。其他运算符没有变动。接着重点要说
- 字典由多个键及与其对应的值构成的对组成(把键值对成为项),每个键和它的值之间用冒号(:)隔开,项之间用逗号(,)隔开,而整个字典由一对大括号
- 看了大神统计voc数据集标签框后,针对自己标注数据集,灵活应用 ,感谢!看代码吧~import reimport osimport xml.
- .csv数据格式 10*3,dataSet 1.1,1.5,2.5 1.3,1.9,3.2 1.5,2.3,3.9 1.7,2.7,4.6
- 引言你在写代码的过程中,有没有遇到过以下问题?已经写好的程序,想看看程序执行的进度?在写代码批量处理文件的时候,如何显示现在处理到第几个文件
- 在做一些工作的时候,有时候会涉及到给图片加上水印,这个如果手动添加的话,效率太低了,通常选择代码完成。下面这个是给图像添加文字水印(图片水印
- 一。首先,添加如下存储过程CREATE PROCEDURE dbo.ChangeObjectOwner @Ol
- 前面的文章,主要讲到如何使用无序列表ul元素来实现复杂柱状图,但是在Web标准中,除了注重表现外,更加注重语意,所谓的语意就是样式和内容的相
- asp使用fso读取驱动器信息:<%vv=drive()response.write vv funct
- selenium3.0之后的版本的就不支持直接打开火狐浏览器,启动火狐浏览器报错,如下图,要想运行就需要我们单独装上驱动。3.0之前的版本,
- 首先,"/"左倾斜是正斜杠,"\"右倾斜是反斜杠,可以记为:除号是正斜杠一般来说对于目录分隔符,Un
- 本文实例讲述了Django框架中间件(Middleware)用法。分享给大家供大家参考,具体如下:1、面向切面编程切点(钩子)切点允许我们动