解决Pandas to_json()中文乱码,转化为json数组的问题

作者:FontTian 时间:2023-12-05 19:06:33 

问题出现与解决

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() 保存文件

来源:https://blog.csdn.net/FontThrone/article/details/75212825

标签:pandas,to,json,中文,乱码
0
投稿

猜你喜欢

  • PHP排序二叉树基本功能实现方法示例

    2023-07-10 04:45:53
  • Oracle备库宕机启动的完美解决方案

    2023-07-20 05:28:34
  • 关于Mysql中文乱码问题该如何解决(乱码问题完美解决方案)

    2024-01-13 20:06:12
  • 快速配置PHPMyAdmin方法

    2023-07-16 07:05:20
  • Go 中 time.After 可能导致的内存泄露问题解析

    2024-02-03 13:05:16
  • Python OpenCV读取png图像转成jpg图像存储的方法

    2023-01-07 13:23:56
  • JS异步宏队列微队列原理详解

    2024-04-22 13:26:43
  • 远古幻想ICON 1套+创作思路

    2007-09-30 20:33:00
  • js中如何对url进行编码和解码

    2023-07-22 03:45:08
  • Pytorch数据读取之Dataset和DataLoader知识总结

    2023-11-02 22:57:37
  • Python爬虫实现网页信息抓取功能示例【URL与正则模块】

    2023-12-09 05:15:03
  • Java中正则表达式split()特殊符号使用详解

    2022-06-27 15:59:32
  • Yii2 assets清除缓存的方法

    2024-05-13 09:51:47
  • SQL Server 中导入导出数据三方法比较

    2009-01-21 14:22:00
  • MySQL8.0.18配置多主一从

    2024-01-15 01:23:15
  • python 算法 排序实现快速排序

    2022-09-04 03:20:17
  • 用Assets 面板为你的站点定做颜色

    2007-02-03 11:39:00
  • 解决pandas使用read_csv()读取文件遇到的问题

    2021-08-29 18:31:02
  • 基于mysql实现group by取各分组最新一条数据

    2024-01-13 05:48:18
  • python实现简单的飞机大战

    2023-07-08 09:16:10
  • asp之家 网络编程 m.aspxhome.com