Pandas to_json()中国語文字化けし
6464 ワード
問題の発生と解決
Pandasがデータ処理を行うと、それをjsonに変換しようとすると、中国語の文字が文字化けして記憶されているというバグが発生する.そこでまた多くのブログを調べた結果、jsonを読み取る際の文字化けし問題が解決した.書き込みの文字化けし問題が解決するわけではない.
そこで自分で1つ書くことにしました.まずdemojsonのクラスライブラリで試してみましたが、だめです.コードの問題です.その後python原生のjsonには符号化変換機能があるはずだと考え、公式サイトのドキュメントを調べてみると、確かにいいですが、いつもより1つのパラメータを追加します.
文字化けしを解決する方法が見つかった以上、pandasのデータ型をjsonに格納するには、pythonが持参したデータ型に変換してから、jsonクラスライブラリを利用してjsonフォーマットに変換して格納すればいいのです.pythonが処理したデータをjson配列に変換し、echartsを利用して表を生成するため、私はそれをクラスにカプセル化し、ソースコードは最後に
格納されたjsonの前後比較
DataFrameToJSOnArray()ソースコード def init(self,dataframe,filepath=’DataFrameToJSOnArrayFile.json’)dataframeに必要なデータ、filepath,jsonファイル格納パス funChangeDataFrameType()は、自動的にDataFrameデータ型を変換し、変換後のDataFrame を返す. funSaveJSOnArrayFile()保存ファイル 転載先:https://www.cnblogs.com/fonttian/p/7253252.html
Pandasがデータ処理を行うと、それをjsonに変換しようとすると、中国語の文字が文字化けして記憶されているというバグが発生する.そこでまた多くのブログを調べた結果、jsonを読み取る際の文字化けし問題が解決した.書き込みの文字化けし問題が解決するわけではない.
そこで自分で1つ書くことにしました.まずdemojsonのクラスライブラリで試してみましたが、だめです.コードの問題です.その後python原生のjsonには符号化変換機能があるはずだと考え、公式サイトのドキュメントを調べてみると、確かにいいですが、いつもより1つのパラメータを追加します.
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()
with open('json/testjson.json', 'w') as f:
f.write(js001)
# "16":6,"17":6,"18":3,"19":4},"content":{"0":"\u63a5\u5f85\u738b\u7389\u7530\u9662\u58eb\u4e00\u884c","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'
# :[email protected]
# 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