image.png
我們 在處理 dataframe 時橘霎,有時候一個字段 的value 其實(shí)就是含有json 字段值的內(nèi)容识埋,如何把它 提取出來 解析出 按列 顯示分割的 Excel 文件
其實(shí)思路就很簡單 荠卷,我首先 讀取到這個文件弦叶,然后定位到這一列,然后提取這一列闪彼,提取好這一列后婿滓,讀取 老速,然后如果格式固定的話,使用 indexof 定位到 json字符串空幻,如果格式不太固定烁峭,使用charAt 定位到j(luò)son 字符串,假如再復(fù)雜一些 則可以使用regex秕铛,
當(dāng)json 字符串 拿到后约郁,再把 json 字符串 轉(zhuǎn)為json 對象,并保存到 json 文件中
按行分割
但两,然后再使用 pandas 讀取 這個json 文件鬓梅,讀取時 pandas自己會轉(zhuǎn)化為dataframe的格式,如果 需要添加 類似索引列谨湘,再在dataframe上 insert 新的索引列绽快,然后 在把 讀取的dataframe芥丧,保存為 pickle 或者 csv 或者 excel格式
,加載 或者打開文件坊罢,驗證文件 正確后 完成
import pandas as pd
import numpy as np
import json
file_path=""
rawData=pd.read_excel("/Users/geo/Documents/集智指數(shù)101000-測試.xlsx",sheetname="工作表1")
midVariable=rawData["中間變量"]
midVariable.head()
listvar=list(midVariable)
len(listvar)
for va in listvar:
stva=str(va).strip()
jsVa=stva[13:-3]
with open("/Users/geo/Documents/jiaoData/record.json", "w") as f:
for va in listvar:
stva = str(va).strip()
jsVa = stva[13:-3]
dictjs = json.loads(jsVa)
json.dump(dictjs, f)
f.write('\n')
# 讀取最后一行 多一個 換行符续担,使用json 拼接換行寫入到文件中
print("加載入文件完成...")
# pandas 讀取json 文件 一定要有 lines=True ,否則讀取失敗 Trailing Data
jsdata=pd.read_json("/Users/geo/Documents/jiaoData/record.json", lines=True)
jsdata.to_pickle("/Users/geo/Documents/jiaoData/record.pkl")
pkls=pd.read_pickle("/Users/geo/Documents/jiaoData/record.pkl")
exel=jsdata.to_excel("/Users/geo/Documents/jiaoData/record.xlsx")
pkls.shape
gidcols=rawData["gid"]
#可以指定插入列的位置 和值 活孩,是否 保存 重復(fù)值
pkls.insert(0,"gid",gidcols, allow_duplicates=False)
pkls.to_excel("/Users/geo/Documents/jiaoData/recordGids.xlsx")
寫成 class方法
import pandas as pd
import numpy as np
import json
class Perceptron(object):
def __init__(self):
self.filePath = "/Users/geo/Documents/集智指數(shù)101000-測試.xlsx"
self.sheetNamez = "工作表1"
self.jsonfilePath = "/Users/geo/Documents/jiaoData/record.json"
@classmethod
def readExcelGetJsonStrList(self,filePath,sheetNamez):
rawData=pd.read_excel(filePath,sheetname=sheetNamez)
midVariable=rawData["中間變量"]
midVariable.head()
listvar=list(midVariable)
len(listvar)
return listvar
@classmethod
def readRawJsonStrListWriteJsonFile(self,listvar):
with open("/Users/geo/Documents/jiaoData/record.json", "w") as f:
for va in listvar:
stva = str(va).strip()
jsVa = stva[13:-3]
dictjs = json.loads(jsVa)
json.dump(dictjs, f)
f.write('\n')
print("加載入文件完成...")
@classmethod
def readJsonFileCovertToDataframeEndExcel(self,srcExcelPath,jsonfilePath,sheetNamez):
rawDatas = pd.read_excel(srcExcelPath, sheet_name=sheetNamez)
gidcols = rawDatas["gid"]
jsdata=pd.read_json(jsonfilePath, lines=True)
jsdata.to_pickle("/Users/geo/Documents/jiaoData/record.pkl")
pkls=pd.read_pickle("/Users/geo/Documents/jiaoData/record.pkl")
pkls.insert(0, "gid", gidcols, allow_duplicates=False)
exel=jsdata.to_excel("/Users/geo/Documents/jiaoData/record.xlsx")
pkls.shape
pkls.to_excel("/Users/geo/Documents/jiaoData/recordGids.xlsx")
#注意 class 定義要在調(diào)用前聲明
if __name__ == '__main__':
rjx = Perceptron()
print("begin convert raw json to excel")
rawjsonStr = rjx.readExcelGetJsonStrList(rjx.filePath, rjx.sheetNamez)
rjx.readRawJsonStrListWriteJsonFile(rawjsonStr)
rjx.readJsonFileCovertToDataframeEndExcel(rjx.filePath, rjx.jsonfilePath, rjx.sheetNamez)