溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何解決Pandas to_json()中文亂碼轉(zhuǎn)化為json數(shù)組的問題

發(fā)布時(shí)間:2021-07-13 16:15:38 來源:億速云 閱讀:267 作者:小新 欄目:開發(fā)技術(shù)

小編給大家分享一下如何解決Pandas to_json()中文亂碼轉(zhuǎn)化為json數(shù)組的問題,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

問題出現(xiàn)與解決

Pandas進(jìn)行數(shù)據(jù)處理之后,假如想將其轉(zhuǎn)化為json,會(huì)出現(xiàn)一個(gè)bug,就是中文文字是以亂碼存儲(chǔ)的,也就是\uXXXXXX的形式,翻了翻官網(wǎng)文檔,查了源碼的參數(shù),(多謝網(wǎng)友提醒)需要設(shè)置js001 = df1.to_json(force_ascii=False),即可顯示中文編碼

如何解決Pandas to_json()中文亂碼轉(zhuǎn)化為json數(shù)組的問題

以下是原文的額外內(nèi)容,DataFrame 轉(zhuǎn)化為json數(shù)組

于是決定自己寫一個(gè).首先用demojson的類庫(kù)嘗試了一下,不行,依舊編碼問題.之后考慮python 原生的 json 應(yīng)該有編碼轉(zhuǎn)換功能,查了查官網(wǎng)文檔,確實(shí)可以,不過要比平時(shí)多加一個(gè)參數(shù)

listXY_json = json.dumps(listXY, sort_keys=True, indent=4, ensure_ascii=False) #ensure_ascii:默認(rèn)值True,如果數(shù)據(jù)中含有非ASCII的字符,則會(huì)類似\uXXXX的顯示數(shù)據(jù),設(shè)置成False后,就能正常顯示

既然找到解決亂碼的方法,那么想要將pandas中的數(shù)據(jù)類型存儲(chǔ)到j(luò)son中就只需要先將其轉(zhuǎn)換為python自帶的數(shù)據(jù)類型,再利用 json 類庫(kù)其轉(zhuǎn)換為json格式并存儲(chǔ)就可以了,因?yàn)槲易约菏菫榱藢ython處理好的數(shù)據(jù)轉(zhuǎn)換為json數(shù)組,然后利用echarts生成表格,所以我將其封裝為了一個(gè)類,源碼在最后

存儲(chǔ)的的json前后對(duì)比

df1 = pd.DataFrame(pd.read_excel(u'excel/袁隆平院士報(bào)告處理后.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":"研究調(diào)改王玉田院士項(xiàng)目入駐協(xié)議,完成簽約儀式方案","1":"\u5b
#處理后
df1 = pd.DataFrame(pd.read_excel(u'excel/袁隆平院士報(bào)告處理后.xlsx'))
dfts = DataFrameToJSONArray(df1, 'json/wyt_xyz.json') # 參數(shù)(df數(shù)據(jù),文件存儲(chǔ)路徑)
dfts.funChangeDataFrameType() # 自動(dòng)轉(zhuǎn)換DataFrame的列數(shù)據(jù)類型
dfts.funSaveJSONArrayFile() # 存儲(chǔ)JSON格式文件
# [["2016-08-08", "袁隆平院士觀摩指導(dǎo)"], ["2016-08-09","修改完善袁隆平院士項(xiàng)目合作協(xié)議"],["2016-08-10","完成袁隆平院士合作協(xié)議"],["2016-08-31","袁隆平院士項(xiàng)目入駐院士港協(xié)議審核完畢"],....]

DataFrameToJSONArray()源碼

# - * - coding: utf - 8 -*-
#
# 作者:田豐(FontTian)
# 創(chuàng)建時(shí)間:'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需要傳入的數(shù)據(jù),filepath,json文件存儲(chǔ)路徑

funChangeDataFrameType() 自動(dòng)轉(zhuǎn)換DataFrame數(shù)據(jù)類型,返回轉(zhuǎn)換后的DataFrame

funSaveJSONArrayFile() 保存文件

以上是“如何解決Pandas to_json()中文亂碼轉(zhuǎn)化為json數(shù)組的問題”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI