Python實(shí)現(xiàn)讀取Excel表數(shù)據(jù)并轉(zhuǎn)為JSON格式文件
Python讀取Excel表格數(shù)據(jù)并寫成JSON格式文件(精簡版)
1. 步驟
步驟 1: 安裝必要的庫
確保你已經(jīng)安裝了pandas和openpyxl(用于讀取Excel文件)。你可以使用pip來安裝這些庫:
pip install pandas openpyxl
步驟 2: 讀取Excel文件
使用pandas的read_excel函數(shù)來讀取Excel文件。
步驟 3: 將數(shù)據(jù)轉(zhuǎn)換為JSON格式
使用pandas的to_json方法將DataFrame轉(zhuǎn)換為JSON格式。
步驟 4: 保存JSON文件
將轉(zhuǎn)換后的JSON數(shù)據(jù)寫入到文件中。
2. 示例代碼
代碼如下
import pandas as pd # 步驟 2: 讀取Excel文件 file_path = 'path_to_your_excel_file.xlsx' # 替換為你的Excel文件路徑 df = pd.read_excel(file_path) # 步驟 3: 將DataFrame轉(zhuǎn)換為JSON格式 # orient參數(shù)可以控制JSON的輸出格式,例如 'records', 'index', 'columns', 'values', 'split' 等。 # 這里使用'records'格式,它會將每一行數(shù)據(jù)作為一個對象。 json_data = df.to_json(orient='records') # 步驟 4: 保存JSON文件 output_file_path = 'output.json' # 指定輸出JSON文件的路徑和名稱 with open(output_file_path, 'w', encoding='utf-8') as f: f.write(json_data) print("Excel數(shù)據(jù)已成功轉(zhuǎn)換為JSON并保存到文件。")
3. 注意事項(xiàng)
確保你的Excel文件路徑是正確的。
根據(jù)你的需求選擇合適的orient參數(shù)值。例如,如果你想要將列作為JSON對象的鍵,可以使用orient=‘columns’。不同的選項(xiàng)會影響JSON的結(jié)構(gòu)。
使用encoding='utf-8’確保在寫入文件時正確處理Unicode字符。
這樣,你就可以將Excel表格數(shù)據(jù)讀取并保存為JSON格式的文件了。
Python讀取Excel表數(shù)據(jù)轉(zhuǎn)為JSON格式文件(詳細(xì)優(yōu)化版)
1.詳細(xì)優(yōu)化部分
該部分以上面精簡代碼為基礎(chǔ)進(jìn)行優(yōu)化改造
1.1 下載pandas
使用pip命令下載pandas庫
pip install pandas openpyxl
1.2 讀取表格文件(可指定sheet頁)
讀取excel文件,可加參數(shù)sheet_name="sheet名稱"來指定Sheet頁,如果不指定,默認(rèn)第一個sheet頁
如想要讀取的名稱為Sheet2
df = pd.read_excel(file_path, sheet_name='Sheet2')
1.3 庫日期處理
由于表格中日期轉(zhuǎn)換為json后變成了一串?dāng)?shù)字,如何解決這個問題,可使用to_datetime函數(shù)
# 假設(shè)日期列名為'Date',且數(shù)據(jù)類型為整數(shù)(Excel序列號) df['Date'] = pd.to_datetime(df['Date'], origin='unix', unit='D') # 將Excel序列號轉(zhuǎn)換為datetime對象 df['Date'] = df['Date'].dt.strftime('%Y-%m-%d') # 將datetime對象轉(zhuǎn)換為字符串格式'年-月-日'
1.4 布爾值轉(zhuǎn)換
表格中的true和false轉(zhuǎn)換時不會做處理,單如果json后續(xù)要導(dǎo)入到mysql表中,mysql表識別true和false會導(dǎo)入失敗,只能識別0和1
可以使用以下代碼將true和false轉(zhuǎn)為1和0
# 修改表中的Boolean值,滿足表中要求的0-1,而不是false true,不然導(dǎo)入報(bào)錯 df['是否加裝急停開關(guān)'] = df['是否加裝急停開關(guān)'].map({True: 1, False: 0})
1.5 空值Na的處理
如果出現(xiàn)了空值,可使用fillna函數(shù)替換,如下
# 將Na替換為空字符 df = df.fillna('')
1.6 列名替換
如果想修改讀取到的列名稱,可使用以下代碼將列名修改值
如excel表中列名是中文,為了更方便導(dǎo)入mysql表,這里將中文列名修改為對應(yīng)的表字段(非表中字段,而是小駝峰)
column_map ={ '任務(wù)單編號': 'taskTicketId', '工號': 'employeeId' } print(df.columns) col_names = df.columns.to_list() col_names = [column_map[s] for s in col_names] print(col_names) df.columns = col_names
2. 詳細(xì)優(yōu)化后的完整代碼
完整代碼如下
# 步驟 1:引入pandas庫 import pandas as pd # 步驟 2: 讀取Excel文件 # file_path = 'path_to_your_excel_file.xlsx' # 替換為你的Excel文件路徑 file_path = '車輛改造單數(shù)據(jù)庫.xlsm' # 替換為你的Excel文件路徑 df = pd.read_excel(file_path, sheet_name='Sheet2') # print(df) # 假設(shè)日期列名為'Date',且數(shù)據(jù)類型為整數(shù)(Excel序列號) # df['Date'] = pd.to_datetime(df['Date'], origin='unix', unit='D') # 將Excel序列號轉(zhuǎn)換為datetime對象 # df['Date'] = df['Date'].dt.strftime('%Y-%m-%d') # 將datetime對象轉(zhuǎn)換為字符串格式'年-月-日' list = ['創(chuàng)建日期','樣品送達(dá)日期','要求完成日期','實(shí)際完成日期'] for i in list: df[i] = pd.to_datetime(df[i], origin='unix', unit='D') # 將Excel序列號轉(zhuǎn)換為datetime對象 df[i] = df[i].dt.strftime('%Y-%m-%d') # 將datetime對象轉(zhuǎn)換為字符串格式'年-月-日' # df['創(chuàng)建日期'] = pd.to_datetime(df['創(chuàng)建日期'], origin='unix', unit='D') # 將Excel序列號轉(zhuǎn)換為datetime對象 # df['創(chuàng)建日期'] = df['創(chuàng)建日期'].dt.strftime('%Y-%m-%d') # 將datetime對象轉(zhuǎn)換為字符串格式'年-月-日' print(df['是否加裝急停開關(guān)']) # 修改表中的Boolean值,滿足表中要求的0-1,而不是false true,不然導(dǎo)入報(bào)錯 df['是否加裝急停開關(guān)'] = df['是否加裝急停開關(guān)'].map({True: 1, False: 0}) # df = df.fillna('') column_map ={ '任務(wù)單編號': 'taskTicketId', '工號': 'employeeId', '委托人': 'requester', '創(chuàng)建日期': 'creationDate', '樣品送達(dá)日期': 'sampleDeliveryDate', '要求完成日期': 'requiredCompletionDate', '實(shí)際完成日期': 'completionDate' } print(df.columns) col_names = df.columns.to_list() col_names = [column_map[s] for s in col_names] print(col_names) df.columns = col_names # 步驟 3: 將DataFrame轉(zhuǎn)換為JSON格式 # orient參數(shù)可以控制JSON的輸出格式,例如 'records', 'index', 'columns', 'values', 'split' 等。 # 這里使用'records'格式,它會將每一行數(shù)據(jù)作為一個對象。orient='records'確保JSON輸出為記錄列表。 # force_ascii=False確保輸出的JSON中包含非ASCII字符,例如中文。 # date_format='iso'確保日期以ISO格式輸出。如果你需要其他日期格式,可以相應(yīng)調(diào)整或去掉此參數(shù)。 json_data = df.to_json(orient='records', indent=4, force_ascii=False, date_format='iso',) # 步驟 4: 保存JSON文件 # output_file_path = 'output.json' # 指定輸出JSON文件的路徑和名稱 output_file_path = '車輛改造單數(shù)據(jù)庫.json' # 指定輸出JSON文件的路徑和名稱 with open(output_file_path, 'w', encoding='utf-8') as f: f.write(json_data) print("Excel數(shù)據(jù)已成功轉(zhuǎn)換為JSON并保存到文件。")
以上就是Python實(shí)現(xiàn)讀取Excel表數(shù)據(jù)并轉(zhuǎn)為JSON格式文件的詳細(xì)內(nèi)容,更多關(guān)于Python讀取Excel并轉(zhuǎn)為JSON的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python使用selenium + headless chrome獲取網(wǎng)頁內(nèi)容的方法示例
這篇文章主要介紹了Python使用selenium + headless chrome獲取網(wǎng)頁內(nèi)容的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10pycharm遠(yuǎn)程連接vagrant虛擬機(jī)中mariadb數(shù)據(jù)庫
這篇文章主要介紹了pycharm遠(yuǎn)程連接vagrant虛擬機(jī)中mariadb數(shù)據(jù)庫,需要的朋友可以參考下2020-06-06基于Python工具使用Web3.py以太坊智能合約開發(fā)的方法
智能合約是區(qū)塊鏈技術(shù)的核心應(yīng)用之一,它允許在沒有中介的情況下,通過代碼自動執(zhí)行合同條款,以太坊是目前最流行的智能合約平臺之一,而Web3.py是用于與以太坊區(qū)塊鏈交互的Python庫,本文將詳細(xì)介紹如何使用Web3.py進(jìn)行以太坊智能合約的開發(fā),需要的朋友可以參考下2024-11-11對python中的os.getpid()和os.fork()函數(shù)詳解
今天小編就為大家分享一篇對python中的os.getpid()和os.fork()函數(shù)詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08Python?Haul利器簡化數(shù)據(jù)爬取任務(wù)提高開發(fā)效率
Haul?是一個專門為數(shù)據(jù)爬取任務(wù)而設(shè)計(jì)的?Python?庫,它提供了一系列的工具和功能,幫助我們輕松處理數(shù)據(jù)爬取中的重復(fù)工作和復(fù)雜問題2024-01-01