Python pandas读取Excel 数据写入到数据库

2023-11-06

需求得到天眼查的法人信息数据导入到数据库中,经过多次不断试错最后使用Python导入

先上代码

import pandas as pd
import sqlalchemy as sqla
import os


# 读取Excel数据
def getexcel(filename):
    # 表头和子段映射关系
    column_dic = {'公司名称': 'company_name', '经营状态': 'business_status', '法定代表人': 'legal_representative',
                  '注册资本': 'registered_capital',
                  '实缴资本': 'paid_up_capital', '成立日期': 'date_of_establishment', '核准日期': 'approval_date',
                  '所属省份': 'province',
                  '所属城市': 'city', '所属区县': 'districts_and_counties', '统一社会信用代码': 'unified_social_credit_code',
                  '纳税人识别号': 'taxpayer_identification_number', '注册号': 'registration_number',
                  '组织机构代码': 'organization_code',
                  '参保人数': 'number_of_participants', '公司类型': 'type_of_company', '所属行业': 'industry', '曾用名': 'former_name',
                  '注册地址': 'registered_address', '最新年报地址': 'the_latest_annual_report_address', '网址': 'url',
                  '电话': 'telephone', '邮箱': 'mail', '其他邮箱': 'other_mailboxes', '经营范围': 'business_scope',
                  '可用电话\n号码正常,可联系': 'telephone', '其他电话': 'other_phone', '其他号码\n未成功检测号码,或固话,或非大陆号码': 'other_phone',
                  '不可用电话\n空号、停机、沉默号、风险号,或同企业电话数量过多,建议跳过': 'unavailable_telephone', }

    # 读取文件,跳过前两行
    df = pd.read_excel(filename, skiprows=2)
    # 字段间的映射转换,Excel中的表头和数据库表中字段的映射
    data = {}
    for i in df.columns:
        if i in column_dic:
            data[i] = column_dic[i]
    df.rename(columns=data, inplace=True)
    return df


# 获取数据库连接
def getCon():
    return sqla.create_engine("postgresql+psycopg2://etl_user用户名:etl_user密码@172.16.xx.xxIP/xxxx数据库")


# 递归读取文件夹的所有文件
def readFile(rootdir):
    db = getCon()
    list = os.listdir(rootdir)
    for i in range(0, len(list)):
        path = os.path.join(rootdir, list[i])
        if os.path.isdir(path):
            readFile(path)
        elif os.path.isfile(path):
            try:
                # 输出读取的文件路径
                print(path)
                # 获取数据
                df = getexcel(path)
                # 写入数据库
                df.to_sql('md_corporate_information_all', db, index=False, if_exists='append')
            except Exception as e:
                print('异常数据:' + path + ', 错误日志:' + e)
        else:
            print('其他:' + path)


if __name__ == '__main__':
    readFile('E:\天眼查')

( 运行程序报错导入对应依赖 )
遇到问题:
得到的文件有5000多个(手工导几乎不可能)
1,excel中的前两行为空,在读取的时候跳过两行
2,excel中列有多种24列,25列,26列都有,但表头都是一样的
3,文件太多,只能使用单线程导入,java使用多线程出现内存溢出

几个示例:
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述
感悟: 数据处理学会使用Python事半功倍,开始尝试使用Java,Kettle等其他工具,总是出现各种问题,换用Python后一次成功

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python pandas读取Excel 数据写入到数据库 的相关文章

随机推荐

  • 3D扫描技术概览

    3D扫描技术概览 复制链接 楼主 eseedo 发表于 2016 11 22 17 14 26 408 0 只看该作者 内容概要 1 使
  • 黑马程序员 JAVA学习笔记 ——— 多线程

    android培训 java培训 期待与您交流 首先 先介绍一下 熟悉的进程 按下 ctrl alt del就可以看到进程这一选项卡 进程是一个正在执行中的程序 每个进程执行都有一个执行顺序 该顺序是一个执行路径 或叫做一个控制单元 而今天
  • Scala基础语法之Trait详解

    Scala系列学习笔记 Scala概述与开发环境配置 Scala基础学习之运算符 Scala基础学习之for循环和while循环 一文掌握scala中的方法和函数 Scala基础 类和对象 访问修饰符和构造器 Scala的继承和抽象类 本章
  • database Derby initial

    surf the site http db apache org derby derby downloads html you ll get more but first is download the lastest Derby derb
  • Linux 网络通讯 : smbd 命令详解

    smbd命令用于Samba服务器程序 smbd为Samba服务器程序 可分享文件与打印机等网络资源供Windows相关的用户端程序存取 语法 1 smbd aDhoP d lt 排错层级 gt i lt 范围 gt l lt 记录文件 gt
  • FPGA(三)——基于FPGA的SPI通讯协议实现

    一 SPI通讯基本原理 1 SPI通讯介绍 SPI Serial Perripheral Interface 串行外围设备接口 是 Motorola 公司推出的一种同步串行接口技术 SPI 总线在物理上是通过接在外围设备微控制器 PICmi
  • Docker快速安装RabbitMQ服务

    Docker快速安装RabbitMQ服务 快速开始 bin bash 建议保存为start sh脚本执行 docker run d hostname my rabbit name some rabbit restart always p 1
  • Java 基础入门篇(一):Java 概述

    文章目录 一 Java 概述 二 Java 的产品 JDK 2 1 JDK 安装 2 2 Java与 Javac 介绍 2 3 Java 程序的开发步骤 三 Java 程序的执行原理 四 JDK 的组成 五 Java 的跨平台工作原理 一
  • Solidity transfer,call和send 的区别

    address transfer throws on failure forwards 2 300 gas stipend not adjustable safe against reentrancy should be used in m
  • SDF文件【简要说明】

    SDF Standard Delay Format 标准延时格式文件 常用延迟反标注 该文件包含了仿真用到的所有 IOPATH INTERCONNECT的延时 线延时 INTERCONNECT fsm block U27 Q fsm blo
  • 2020-10-10

    闭包和装饰器 1 高阶函数 接收函数作为参数是高阶函数 将函数作为返回值返回的函数就是高阶函数 2 匿名函数 lambda函数 无名函数 语法 lambda 参数列表 表达式 filter 函数 过滤列表 第一个参数 函数 第二个参数 序列
  • Java设计模式(十四)—— 模板方法模式

    模板方法模式是指定义一个操作中算法的骨架 而将一些步骤延迟到子类中 模板方法使子类可以不改变一个算法的结构 即可重定义该算法的某些特定步骤 适合模板方法模式的情景如下 编制一个通用算法 将某些步骤的具体实现留给子类来实现 需要重构代码 将各
  • 对Linux svn保存的明文密码加密

    需求来源 随着GitHub GitLab的兴起 svn已经渐渐的没落了 从公司当初的源代码管理服务器 逐渐演变成公司的ftp服务器 最近需要部署gitlab的CI单元测试模块 而软件版本都在svn上有备份 我就希望从代码的提交 gt 到版本
  • Python统计文本数字,字母,单词量

    统计一百万位圆周率中数字0 9各自的数量 统计一本书中字母a z各自的数量 统计一本书共有多少个单词 含重复的单词 和单词量 不含重复的单词 import string class CountNums 求txt文本中数字或字母的数量 def
  • Jvm类加载机制详解---类加载器及双亲委托模型

    前面介绍了类加载的几个过程 实际中这些过程大部分都是由虚拟机本身去执行的 我们没有办法去改变或影响这些过程的执行 但是虚拟机团队将类加载阶段第一步中的 通过一个类的全限定名来获取描述该类的二进制字节流 这个动作放到虚拟机外部去实现 以便让应
  • 使用R语言绘制ovarian数据集中病例年龄分布的直方图

    使用R语言绘制ovarian数据集中病例年龄分布的直方图 直方图是一种常用的数据可视化工具 用于展示连续变量的分布情况 在R语言中 我们可以使用hist 函数轻松地创建直方图 本文将展示如何使用R语言绘制ovarian数据集中病例年龄的分布
  • String、StringBuffer和StringBuilder三者之间的区别

    最基本的区别就是String是一个字符串常量 长度不可改变 StringBuffer和StringBuilder是字符串变量 他们两个的长度可以改变 但StringBuffer是线程安全的 而StringBuilder是非线程安全的 Str
  • ** LeetCode 刷题 459

    这是一道我没做出来的简单题 5555 学习 方法1 移动匹配 如果一个字符串可以由一个字串重复获得 那么将两个相同字符串并起来 一定可以在中间再找到该字符串 class Solution public bool repeatedSubstr
  • JavaEE-过滤器和监听器 案例分析

    目录 过滤器和监听器 什么是过滤器 过滤器编程接口 接口Filter的主要方法 设计过滤器 实例1 编写一个过滤器审计用户对资源的访问 什么是监听器 监听器编程接口 设计监听器 实例 编写一个HttpSession事件监听器用来记录当前在线
  • Python pandas读取Excel 数据写入到数据库

    需求得到天眼查的法人信息数据导入到数据库中 经过多次不断试错最后使用Python导入 先上代码 import pandas as pd import sqlalchemy as sqla import os 读取Excel数据 def ge