码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 记一次用dataframe进行数据清理


    总结一下dataframe读取数据库,以及整理数据的过程。分为三个部分:数据读取,数据整理以及数据写入。

    1、数据读取

    从csv读取读取数据,使用pandas读的read_csv函数,传入两个参数,分别是path文件路径,usecols读取的列表,返回的是dataframe格式。

    1. import pandas as pd
    2. def csv_read(path, usecols):
    3. return pd.read_csv(path, usecols=usecols, encoding="gbk")

    2、数据整理

    我需要做清除空值,替换固定值,匹配关键词等操作。

    1)清除空值很简单,按列替换空值,效率挺快。

    df.fillna(0, inplace=True)

    2)替换固定值很简单, 按列替换空值,效率挺快

    df["s_serialno"] = df["s_serialno"].str.replace("'", "")

    3)匹配关键词,由于多个关键词对多个内容,使用第一点的按列匹配就不行,我使用遍历方法

    itertuples,其他的遍历方法可参见:Python - pandas DataFrame数据的合并与拼接(merge、join、concat)_pd.merge合并后顺序-CSDN博客

     一开始我是匹配到不到关键词,就直接删除掉,测试小量数据还行,但面对几十万数据,频繁地让Dataframe删除数据,效率很低。于是作了如下改写,先将需要删作的idx保存下来,再一并删除。

    1. dropindex = []
    2. keyword= 'XXXXX'
    3. for obj in df.itertuples():
    4. idx = getattr(obj, "Index")
    5. if getattr(obj, "cnt") not in keyword.to_string():
    6. dropindex.append(idx)
    7. df.drop(dropindex, inplace=True)

    3、数据写入

    使用dataframe.to_sql方法,开始的写法,为保证数据唯一性,避免主键重复出错,使用try except方法 ,一条一条录入,若主键重复直接pass即可。小量数据测试还行,面对几十万数据,单条录入,数据库与程序的I/O效率不高,数据录入缓慢。

    1. from sqlalchemy import create_engine
    2. def mysql_engine():
    3. return create_engine("mysql+pymysql://root:10086@192.168.1.1:3306/order")
    4. def write_sql(rows):
    5. # 使用逐条插入,而不用批量插入,用try-except判断避免重复插入的异常
    6. for i in range(len(df)):
    7. try:
    8. df.iloc[i : i + 1].to_sql(
    9. name=table_name, con=mysql_engine(), if_exists="append", index=False
    10. )
    11. except Exception as e:
    12. # print(e)
    13. pass

    于是我改用另一种方法:

    使用原生sql语句,批量导入数据,使用ON DUPLICATE key UPDATE 避免主键重复出错。

    1. import pymysql
    2. def getConn():
    3. return pymysql.connect(
    4. host="192.168.1.1", user="root", password="123456", database="order"
    5. )
    6. def write_sql(rows):
    7. sql = (
    8. "insert into order.TABLE("
    9. "s_A,"
    10. "s_B"
    11. ") values(%s,%s)"
    12. "ON DUPLICATE key UPDATE s_B=values(s_B)"
    13. )
    14. conn = getConn()
    15. cur = conn.cursor()
    16. cur.executemany(sql, rows)
    17. conn.commit()
    18. cur.close()
    19. conn.close()

  • 相关阅读:
    UMLChina建模竞赛第3赛季第10轮:汽车、EA
    WorkPlus | 好用、专业、安全的局域网即时通讯及协同办公平台
    LVDS、LVPECL、CML三种高速逻辑电平的比较
    暑假加餐|有钱人和你想的不一样(第15天)+财富与金钱的秘密【干货】
    css------div标签中居中的方式
    记一次生产中使用CompletableFuture遇到的坑
    java虚拟机详解篇八(运行时数据区概述)
    地产三维实景vr展示的功能及特点
    改进YOLOv7系列:最新结合DO-DConv卷积、Slim范式提高性能涨点,打造高性能检测器
    【数据结构】——二叉树oj题详解
  • 原文地址:https://blog.csdn.net/qiuweifan/article/details/133484238
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号