《使用Python将Excel数据批量写入MongoDB数据库》

news2024/12/25 9:22:33

        在数据分析及处理过程中,我们经常需要将数据写入数据库。而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数据库。这个方法不仅高效,而且易于操作,非常适合处理大规模数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1251258.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习-线性回归

线性模型是一类用于建模输入特征与输出之间线性关系的统计模型。这类模型的基本形式可以表示为: 其中: 是模型的输出(目标变量)。 是截距(常数项,表示在所有输入特征都为零时的输出值)。 是权重…

CCFCSP试题编号:202206-2试题名称:寻宝!大冒险!

一、题目 二、分析 因为藏宝图左下角位置一定是一棵树,所以只要把所有绿化图中每一棵树,与之相匹配,然后判断,是否整个藏宝图都是绿化图的一部分,如果是那就计数count1。所以来看,结果count最大也就是n(绿…

【c++j继承】

在编程领域中,面向对象是一种非常流行的程序设计方法。C 继承是面向对象编程中的一个重要概念,它允许我们创建一个新的类(子类)来继承已有的类(父类)的属性和方法。通过继承,我们可以实现代码的…

【vue实战项目】通用管理系统:学生列表

本文为博主的vue实战小项目系列中的第五篇,很适合后端或者才入门的小伙伴看,一个前端项目从0到1的保姆级教学。前面的内容: 【vue实战项目】通用管理系统:登录页-CSDN博客 【vue实战项目】通用管理系统:封装token操作…

CMD - ping

文章目录 前言参数 前言 ping 命令主要测试到达指定 IP 或主机的连通性. 参数 -t: ping 指定的计算机直到中断 -a: 将地址解析为主机名 -n count: 要发送的回显请求数

【Linux】常见指令及周边知识(一)

【Linux】常见指令及周边知识(一) 一、初始Linux操作系统1.Linux背景2.如何使用Linux 二、学习Linux之前的预备周边知识(重点):1.什么叫做文件?2. Linux下的路径分隔符3.在Linux中为什么会存在路径&#xf…

电子学会C/C++编程等级考试2022年03月(二级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:温度统计 现有一段时间的温度数据,请统计指定温度出现的次数。 时间限制:1000 内存限制:65536输入 第一行一个整数n,表示温度数据的个数。(0 < n ≤ 200) 第二行n个整数,以空格分隔,每个整数表示一个温度,温度的范围大…

Python中的数据类型

如果说python中的数据类型,那我们要从标准数据类型说起,在python中标准数据类型如下: 数字类型: 数字数据类型用于存储数值。 他们是不可改变的数据类型&#xff0c;这意味着改变数字数据类型会分配一个新的对象。 在python2.X中数据类型分的比较多,有int(有符号整型),long(…

训练日志——wandb

目录 安装与登录基础使用与可视化常用函数wandb.init()wandb.config()wandb.log()wandb.finish()wandb.watch() 参考 安装与登录 安装 pip install wandb注册并登录 https://wandb.ai/site客户端登陆 在终端中输入wandb login 然后出现You can find you API key的一串网站&am…

cocos游戏引擎,弹出框浏览器正常,但到了抖音、微信小游戏就不显示的bug原因及解决办法

本篇文章主要讲解&#xff1a;cocos游戏引擎&#xff0c;浏览器测试时弹出框好好的&#xff0c;无任何报错&#xff0c;构建项目到抖音、微信小游戏时无法弹出弹出框&#xff0c;但又无报错的问题原因及解决办法。 日期&#xff1a;2023年11月25日 作者&#xff1a;任聪聪 问题…

系列十四、BeanFactory vs FactoryBean vs ApplicationContext

一、BeanFactory 1.1、概述 IOC思想是基于IOC容器完成的&#xff0c;IOC容器的底层就是对象工厂&#xff0c;其核心接口为BeanFactory&#xff0c;BeanFactory是一个工厂类&#xff0c;负责生产和管理各种各样的bean&#xff0c;也是Spring内部的使用接口&#xff0c;不提供给…

基于springboot实现学生成绩管理系统项目【项目源码+论文说明】

基于springboot实现学生成绩管理系统演示 摘要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&am…

一键提取随机画面为JPG图片,实现高效剪辑

你是否曾经在观看视频时&#xff0c;遇到了一些精彩瞬间&#xff0c;却无法将其保存下来&#xff1f;现在&#xff0c;我们为你带来了一款全新的工具——视频批量剪辑&#xff0c;一键提取随机画面为JPG图片&#xff0c;让你可以轻松留住这些精彩瞬间&#xff01; 首先&#xf…

C++入门第九篇---Stack和Queue模拟实现,优先级队列

前言&#xff1a; 我们已经掌握了string vector list三种最基本的数据容器模板&#xff0c;而对于数据结构的内容来说&#xff0c;其余的数据结构容器基本都是这三种容器的延申和扩展&#xff0c;在他们的基础上扩展出更多功能和用法&#xff0c;今天我们便来模拟实现一下C库中…

CDA一级备考思维导图

CDA一级备考思维导图 第一章 数据分析概述与职业操守1、数据分析概念、方法论、角色2、数据分析师职业道德与行为准则3、大数据立法、安全、隐私 CDA一级复习备考资料共计七个章节&#xff0c;如需资料&#xff0c;请留言&#xff0c;概览如下图&#xff1a; 第一章 数据分析…

P11 如何写一个C++类 Log日志基础

01 前言 到目前为止&#xff0c;我们学了类 class&#xff0c;本期我们要尝试着从头开始写一个类。 本期不会讲的太深。我们不会写非常复杂的类&#xff0c;我们要会完成一个基本的 log 类 02 为什么使用 log 首先我们先分析一下我们的需求&#xff0c;这个 log 类到底是什么…

安捷伦E4404B频谱分析仪,100 Hz 至 6.7 GHz

E4404B是安捷伦ESA-E系列频谱分析仪&#xff0c;它是一款能够适应未来发展需求的中高端频谱分析仪解决方案。该系列在频谱分析仪的测量速度、动态范围、精度和功率分辨能力等方面&#xff0c;都为类似价位的产品树立了性能标杆。其灵活的平台设计使得研发、制造和现场服务工程师…

HCIA-RS基础-距离矢量路由协议

前言&#xff1a; 动态路由协议根据寻径方式可以分为距离矢量路由协议和链路状态路由协议。本文将详细介绍距离矢量路由协议的原理&#xff0c;并阐述其中一个重要概念——路由环路&#xff0c;同时介绍如何避免路由环路的方法。通过学习本文&#xff0c;您将能够深入理解距离矢…

探秘:性能测试中最常见的陷阱与解决方案!

概述一下性能测试流程&#xff1f; 1.分析性能需求。挑选用户使用最频繁的场景来测试。确定性能指标&#xff0c;比如&#xff1a;事务通过率为100%&#xff0c;TOP99%是5秒&#xff0c;最大并发用户为1000人&#xff0c;CPU和内存的使用率在70%以下2.制定性能测试计划&#x…

Acrel-2000电力监控系统在上海大世界保护修缮工程项目中的应用

摘要&#xff1a;安科瑞生产厂家1876150/-6237黄安南 介绍上海大世界电力监控系统&#xff0c;采用智能电力仪表采集配电现场的各种电参量和开关信号。系统采用现场就地组网的方式&#xff0c;组网后通过现场总线通讯并远传至后台&#xff0c;通过Acrel-2000型电力监控系统实现…