????????在數據分析及處理過程中,我們經常需要將數據寫入數據庫。而MongoDB作為一種NoSQL數據庫,其具有強大的可擴展性、高性能以及支持復雜查詢等特性,廣泛用于大規模數據存儲和分析。在這篇文章中,我們將使用Python編寫一個將Excel數據批量寫入MongoDB的腳本,以便更加高效地管理數據。
????????首先,我們需要先安裝必要的依賴包,即pandas和pymongo。在安裝完畢后,我們可以使用如下代碼連接到MongoDB數據庫:
import pandas as pd
from pymongo import MongoClient, UpdateOne# 連接到MongoDB數據庫
client = MongoClient('mongodb://localhost:27017/')
db = client['pms']
collection = db['hospital']
????????在連接到數據庫之后,我們需要讀取Excel文件,并對數據進行初步的處理。在這里,我們使用pandas庫來讀取Excel數據,然后使用一些函數對數據進行清洗和轉換:
# 讀取Excel文件
excel_file = 'D:/下載/各省數據 - 副本/20230407北京各事業部用戶客戶數據匯總.xls'
df = (pd.read_excel(excel_file, skiprows=4, sheet_name='101').iloc[0:-3] # 刪除倒數3行.iloc[:, 2:] # 刪除前倆列.drop(columns=['備注']) # 刪除最后1列.fillna({'護士': 0}) # 用指定的值填充缺失值.ffill() # 填充空值.assign( # 拆分序列醫院名稱=lambda x: x['醫院名稱'].str.split("\n"),科室=lambda x: x['科室'].ffill().apply(int), # 轉換類型床位=lambda x: x['床位'].ffill().apply(int), # 轉換類型)
)
????????其中,我們使用了一些pandas的函數,如fillna、ffill、drop、assign等來對數據進行處理。處理完成后,我們將數據轉換為列表形式,并使用一個字典來將數據按照醫院進行分組:
data_list = df.values.tolist()
hospitals = {}
for result in data_list:hospital_name = result[0][0]if hospital_name not in hospitals:hospitals[hospital_name] = {'hospital': result[0][0],'department': result[1],'bed': result[2],'doctor': [result[3]],'nurse': [result[4]],}else:if result[3] not in hospitals[hospital_name]['doctor']:hospitals[hospital_name]['doctor'].append(result[3])if result[4] != 0 and result[4] not in hospitals[hospital_name]['nurse']:hospitals[hospital_name]['nurse'].append(result[4])
????????在生成字典之后,我們需要將數據批量寫入MongoDB數據庫中。這里使用了pymongo庫的bulk_write函數,它能夠高效地批量添加、修改和刪除數據:
# 批量添加或更新數據
operations = []
for data in hospitals.values():operations.append(UpdateOne({'hospital': data['hospital']}, {'$set': data}, upsert=True))
result = collection.bulk_write(operations)
print(f'添加或更新數據完畢,共執行 {result.modified_count + result.upserted_count} 項操作。')
????????最后,我們可以通過運行這些代碼來將Excel數據批量寫入MongoDB數據庫。這種方法極大地提高了數據管理的效率,使我們能夠更好地處理數據,更好地進行數據分析。
????????綜上所述,本篇文章介紹了一個簡單的Python腳本,可將Excel數據批量寫入MongoDB數據庫。這個方法不僅高效,而且易于操作,非常適合處理大規模數據。