解決Pandas to_json()中文亂碼,轉(zhuǎn)化為json數(shù)組的問題
問題出現(xiàn)與解決
Pandas進(jìn)行數(shù)據(jù)處理之后,假如想將其轉(zhuǎn)化為json,會出現(xiàn)一個bug,就是中文文字是以亂碼存儲的,也就是\uXXXXXX的形式,翻了翻官網(wǎng)文檔,查了源碼的參數(shù),(多謝網(wǎng)友提醒)需要設(shè)置js001 = df1.to_json(force_ascii=False),即可顯示中文編碼
以下是原文的額外內(nèi)容,DataFrame 轉(zhuǎn)化為json數(shù)組
于是決定自己寫一個.首先用demojson的類庫嘗試了一下,不行,依舊編碼問題.之后考慮python 原生的 json 應(yīng)該有編碼轉(zhuǎn)換功能,查了查官網(wǎng)文檔,確實可以,不過要比平時多加一個參數(shù)
listXY_json = json.dumps(listXY, sort_keys=True, indent=4, ensure_ascii=False) #ensure_ascii:默認(rèn)值True,如果數(shù)據(jù)中含有非ASCII的字符,則會類似\uXXXX的顯示數(shù)據(jù),設(shè)置成False后,就能正常顯示
既然找到解決亂碼的方法,那么想要將pandas中的數(shù)據(jù)類型存儲到j(luò)son中就只需要先將其轉(zhuǎn)換為python自帶的數(shù)據(jù)類型,再利用 json 類庫其轉(zhuǎn)換為json格式并存儲就可以了,因為我自己是為了將python處理好的數(shù)據(jù)轉(zhuǎn)換為json數(shù)組,然后利用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":"研究調(diào)改王玉田院士項目入駐協(xié)議,完成簽約儀式方案","1":"\u5b #處理后 df1 = pd.DataFrame(pd.read_excel(u'excel/袁隆平院士報告處理后.xlsx')) dfts = DataFrameToJSONArray(df1, 'json/wyt_xyz.json') # 參數(shù)(df數(shù)據(jù),文件存儲路徑) dfts.funChangeDataFrameType() # 自動轉(zhuǎn)換DataFrame的列數(shù)據(jù)類型 dfts.funSaveJSONArrayFile() # 存儲JSON格式文件 # [["2016-08-08", "袁隆平院士觀摩指導(dǎo)"], ["2016-08-09","修改完善袁隆平院士項目合作協(xié)議"],["2016-08-10","完成袁隆平院士合作協(xié)議"],["2016-08-31","袁隆平院士項目入駐院士港協(xié)議審核完畢"],....]
DataFrameToJSONArray()源碼
# - * - coding: utf - 8 -*- # # 作者:田豐(FontTian) # 創(chuàng)建時間:'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文件存儲路徑
funChangeDataFrameType() 自動轉(zhuǎn)換DataFrame數(shù)據(jù)類型,返回轉(zhuǎn)換后的DataFrame
funSaveJSONArrayFile() 保存文件
以上這篇解決Pandas to_json()中文亂碼,轉(zhuǎn)化為json數(shù)組的問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Pandas中DataFrame數(shù)據(jù)刪除詳情
這篇文章主要以介紹的是Pandas中DataFrame的數(shù)據(jù)刪除的相關(guān)資料,主要使用drop、del方式,需要的朋友可以參考下面文章的具體內(nèi)容2021-09-09Python3自動生成MySQL數(shù)據(jù)字典的markdown文本的實現(xiàn)
這篇文章主要介紹了Python3自動生成MySQL數(shù)據(jù)字典的markdown文本的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05