python pandas数据处理,对比两个xlsx文档的两列数据做对比匹配,然后复制单元格值

news2025/1/11 2:56:36

1,文档数据

 文档A

批次编号编号风险等级意见
ps001code1低风险同意
ps001code2中风险同意
ps001code3低风险同意
ps001code4低风险同意
ps001code5低风险同意
ps001code6低风险同意
ps002code11低风险同意
ps002code12中风险否决
ps002code13低风险否决
ps002code14低风险否决
ps002code15中风险否决
ps002code16低风险否决
ps002code17中风险否决
ps003code111低风险否决
ps003code112低风险否决
ps003code113中风险否决
ps003code114低风险同意
ps003code115低风险同意
ps003code116中风险同意
ps003code117低风险同意

 

文档B

批次编号编号风险等级意见
ps001code1
ps001code2
ps001code3
ps001code4
ps001code5
ps001code6
ps002code11
ps002code12
ps002code13
ps002code14
ps002code15
ps002code16
ps002code17
ps003code111
ps003code112
ps003code113
ps003code114
ps003code115
ps003code116
ps003code117
ps004code118
ps005code119
ps006code120
ps007code121
ps008code122
ps009code123
ps010code124

2,匹配两列数据,复制单元格值

import pandas as pd

# 读取文档A和文档B
doc_A = pd.read_excel('A.xlsx')  # 替换为实际文件路径
doc_B = pd.read_excel('B.xlsx')  # 替换为实际文件路径

# 假设文档A的A列和B列对应的是ps1和code1,C列为需要复制的数据
# 遍历文档A
for index_A, row_A in doc_A.iterrows():
    ps1 = row_A['批次编号']  # 替换'A'为实际列名
    code1 = row_A['编号']  # 替换'B'为实际列名
    c_value = row_A['风险等级']  # 获取文档A中C列的值,准备复制到文档B
    d_value = row_A['意见']  # 获取文档A中C列的值,准备复制到文档B

    # 在文档B中查找匹配的行
    matching_rows = (doc_B['批次编号'] == ps1) & (doc_B['编号'] == code1)

    # 如果找到匹配的行,将文档A的C列值复制到文档B的C列
    if matching_rows.any():
        doc_B.loc[matching_rows, '风险等级'] = c_value
        doc_B.loc[matching_rows, '意见'] = d_value

# 保存修改后的文档B
doc_B.to_excel('文档B_修改后.xlsx', index=False)  # 保存为新的文件

print("文档B已更新并保存。")

 

3,两文档两列数据不一致的,标记红色

import pandas as pd
from openpyxl import load_workbook
from openpyxl.styles import PatternFill

# 读取文档A和文档B
doc_A = pd.read_excel('A.xlsx')  # 替换为实际文件路径
doc_B = pd.read_excel('B.xlsx')  # 替换为实际文件路径

# 假设文档A的"批次编号"和"编号"列用于匹配,风险等级为需要复制的数据
for index_A, row_A in doc_A.iterrows():
    ps1 = row_A['批次编号']
    code1 = row_A['编号']
    c_value = row_A['风险等级']
    d_value = row_A['意见']

    # 在文档B中查找匹配的行
    matching_rows = (doc_B['批次编号'] == ps1) & (doc_B['编号'] == code1)

    # 如果找到匹配的行,将文档A的"风险等级"值复制到文档B
    if matching_rows.any():
        doc_B.loc[matching_rows, '风险等级'] = c_value
        doc_B.loc[matching_rows, '意见'] = d_value

# 保存修改后的文档B
doc_B.to_excel('文档B_修改后.xlsx', index=False)  # 保存为新的文件

print("文档B已更新并保存。")

# 保存修改后的文档B,并标记未匹配的行
# 加载文档B的Excel文件
wb = load_workbook('文档B_修改后.xlsx')  # 替换为实际文件路径
ws = wb.active

# 定义红色填充样式
red_fill = PatternFill(start_color="FF0000", end_color="FF0000", fill_type="solid")

# 遍历文档B的行,标记未匹配的行(风险等级为空的行)
for row in ws.iter_rows(min_row=2, max_col=ws.max_column, max_row=ws.max_row):
    # 获取批次编号和编号
    ps1_cell, code_cell, risk_cell = row[0], row[1], row[2]

    # 检查是否匹配到文档A中的数据
    if doc_B[(doc_B['批次编号'] == ps1_cell.value) & (doc_B['编号'] == code_cell.value)]['风险等级'].isna().any():
        # 如果没有匹配到,标记为红色
        for cell in [ps1_cell, code_cell, risk_cell]:
            cell.fill = red_fill

# 保存到新文件
wb.save('文档B_修改为红色.xlsx')  # 保存为新的文件

print("文档B已更新并保存,未匹配的数据已被标记为红色。")

 

 4,统计批次编号不一致的数量,输出该不一致的批次编号

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# 文件名:demo9.py
# 作者:Administrator
# 日期:2024/12/9
# 描述:
import pandas as pd
from openpyxl import load_workbook
from openpyxl.styles import PatternFill

# 读取文档A和文档B
doc_A = pd.read_excel('A.xlsx')  # 替换为实际文件路径
doc_B = pd.read_excel('B.xlsx')  # 替换为实际文件路径

# 统计文档A和文档B中每个批次编号的数量
doc_A_counts = doc_A['批次编号'].value_counts().reset_index()
doc_B_counts = doc_B['批次编号'].value_counts().reset_index()

# 重命名列以便后续合并
doc_A_counts.columns = ['批次编号', 'A_count']
doc_B_counts.columns = ['批次编号', 'B_count']

# 合并两个统计结果
count_comparison = pd.merge(doc_A_counts, doc_B_counts, on='批次编号', how='outer')

# 找出数量不一致的批次编号
inconsistent_batches = count_comparison[count_comparison['A_count'].fillna(0) != count_comparison['B_count'].fillna(0)]

# 输出数量不一致的批次编号
if not inconsistent_batches.empty:
    print("文档A和文档B中批次编号数量不一致的批次编号如下:")
    print(inconsistent_batches[['批次编号', 'A_count', 'B_count']])
else:
    print("文档A和文档B中批次编号数量一致。")

# 继续执行原有的数据更新和未匹配行标记操作
for index_A, row_A in doc_A.iterrows():
    ps1 = row_A['批次编号']
    code1 = row_A['编号']
    c_value = row_A['风险等级']
    d_value = row_A['意见']

    # 在文档B中查找匹配的行
    matching_rows = (doc_B['批次编号'] == ps1) & (doc_B['编号'] == code1)

    # 如果找到匹配的行,将文档A的"风险等级"值复制到文档B
    if matching_rows.any():
        doc_B.loc[matching_rows, '风险等级'] = c_value
        doc_B.loc[matching_rows, '意见'] = d_value

# 保存修改后的文档B
doc_B.to_excel('文档B_修改后.xlsx', index=False)  # 保存为新的文件

print("文档B已更新并保存。")

# 保存修改后的文档B,并标记未匹配的行
# 加载文档B的Excel文件
wb = load_workbook('文档B_修改后.xlsx')  # 替换为实际文件路径
ws = wb.active

# 定义红色填充样式
red_fill = PatternFill(start_color="FF0000", end_color="FF0000", fill_type="solid")

# 遍历文档B的行,标记未匹配的行(风险等级为空的行)
for row in ws.iter_rows(min_row=2, max_col=ws.max_column, max_row=ws.max_row):
    # 获取批次编号和编号
    ps1_cell, code_cell, risk_cell = row[0], row[1], row[2]

    # 检查是否匹配到文档A中的数据
    if doc_B[(doc_B['批次编号'] == ps1_cell.value) & (doc_B['编号'] == code_cell.value)]['风险等级'].isna().any():
        # 如果没有匹配到,标记为红色
        for cell in [ps1_cell, code_cell, risk_cell]:
            cell.fill = red_fill

# 保存到新文件
wb.save('文档B_修改为红色.xlsx')  # 保存为新的文件

print("文档B已更新并保存,未匹配的数据已被标记为红色。")

 

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

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

相关文章

Pytorch 手写数字识别 深度学习基础分享

本篇是一次内部分享,给项目开发的同事分享什么是深度学习。用最简单的手写数字识别做例子,讲解了大概的原理。 手写数字识别 展示首先数字识别项目的使用。项目实现过程: 训练出模型准备html手写板flask 框架搭建简单后端 简单手写数字识别 深度学习必…

WPS EXCEL 使用 WPS宏编辑器 写32位十六进制数据转换为浮点小数的公式。

新建EXCLE文件 另存为xlsm格式的文件 先打开WPS的开发工具中的宏编辑器 宏编辑器编译环境 在工作区添加函数并编译,如果有错误会有弹窗提示,如果没有错误则不会弹 函数名字 ”HEXTOFLOAT“ 可以自己修改。 function HEXTOFLOAT(hex) { // 将十六…

沃丰科技智能客服在跨境电商独立站中的核心角色

随着全球化进程的加速和互联网技术的不断发展,跨境电商行业蓬勃兴起,为消费者提供了更广阔、更便捷的购物选择。在这样一个竞争激烈的市场环境中,优质的客户服务成为了企业脱颖而出的关键。沃丰科技智能客服凭借其先进的技术和人性化的设计理…

langgraph实现无观测推理 (Reasoning without Observation)

图例 1. 图状态 在 LangGraph 中,每个节点都会更新一个共享的图状态。当任何节点被调用时,状态就是该节点的输入。 下面,我们将定义一个状态字典,用以包含任务、计划、步骤和其他变量。 from typing import List from typing…

2024企业数据资产入表合规指引——解读

更多数据资产资讯关注公众:数字化转型home 本报告旨在为企业数据资产入表提供合规保障。随着数字经济的发展,数据资产已成为重要战略资源和新生产要素。财政部发布的《企业数据资源相关会计处理暂行规定》明确,自2024年1月1日起,数…

19,[极客大挑战 2019]PHP1

这个好玩 看到备份网站字眼&#xff0c;用dirsearch扫描 在kali里打开 找出一个www.zip文件 访问一下 解压后是这个页面 class.php <?php include flag.php; error_reporting(0); class Name{ private $username nonono; private $password yesyes; public …

计算机键盘简史 | 键盘按键功能和指法

注&#xff1a;本篇为 “计算机键盘简史 | 键盘按键功能和指法” 相关文章合辑。 英文部分机翻未校。 The Evolution of Keyboards: From Typewriters to Tech Marvels 键盘的演变&#xff1a;从打字机到技术奇迹 Introduction 介绍 The keyboard has journeyed from a humb…

《Clustering Propagation for Universal Medical Image Segmentation》CVPR2024

摘要 这篇论文介绍了S2VNet&#xff0c;这是一个用于医学图像分割的通用框架&#xff0c;它通过切片到体积的传播&#xff08;Slice-to-Volume propagation&#xff09;来统一自动&#xff08;AMIS&#xff09;和交互式&#xff08;IMIS&#xff09;医学图像分割任务。S2VNet利…

HarmonyOS(65) ArkUI FrameNode详解

Node 1、Node简介2、FrameNode2.1、创建和删除节点2.2、对FrameNode的增删改2.3、 FramNode的查询功能3、demo源码4、总结5、参考资料1、Node简介 在HarmonyOS(63) ArkUI 自定义占位组件NodeContainer介绍了自定义节点复用的原理(阅读本本篇博文之前,建议先读读这个),在No…

Elasticsearch使用(2):docker安装es、基础操作、mapping映射

1 安装es 1.1 拉取镜像 docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/elasticsearch:7.17.3 1.2 运行容器 运行elasticsearch容器&#xff0c;挂载的目录给更高的权限&#xff0c;否则可能会因为目录权限问题导致启动失败&#xff1a; docker r…

java实现SpringBoot项目分页查询和消费的方法

简介 why&#xff1a; 最近在项目中&#xff0c;有一个sql需要查询100多万的数据&#xff0c;且需要在代码中遍历处理。面临两个问题 一次性查询出太多数据&#xff0c;速度较慢当前服务器内存支持以上操作&#xff0c;但是随着数据量的增多&#xff0c;以后可能会出现内存溢出…

专为高性能汽车设计的Armv9架构的Neoverse V3AE CPU基础知识与软件编码特性解析

一、ARMv9以及V3AE处理器架构 Armv9架构的Arm Neoverse V系列处理器是专为高性能计算设计的产品线&#xff0c;其中V3AE&#xff08;Advanced Efficiency&#xff09;特别强调了性能与效率之间的平衡。以下是关于Armv9架构下Neoverse V3AE处理器结构和指令集的一些详细解读&am…

Python数据清洗之重复数据处理

大家好&#xff0c;在数据处理和分析的过程中&#xff0c;重复数据是一个常见的问题。重复的数据不仅会影响数据的准确性&#xff0c;还可能导致模型训练中的偏差。因此&#xff0c;检测并清理重复数据是数据清洗中的重要步骤。Python 的 Pandas 提供了强大的功能来检测、标记和…

【实战教程】使用YOLO和EasyOCR实现视频车牌检测与识别【附源码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

【项目实战】基于python+爬虫的电影数据分析及可视化系统

注意&#xff1a;该项目只展示部分功能&#xff0c;如需了解&#xff0c;文末咨询即可。 本文目录 1.开发环境2 系统设计 2.1 设计背景2.2 设计内容 3 系统页面展示 3.1 用户页面3.2 后台页面3.3 功能展示视频 4 更多推荐5 部分功能代码 5.1 爬虫代码5.2 电影信息代码 1.开发环…

SDXL的优化工作

本文详细介绍SDXL在SD系列的基础上做了什么优化&#xff0c;包括模型架构优化和训练过程数据的相关优化策略。 目录 Stable Diffusion XL核心基础内容 SDXL整体架构初识 Base模型 Refiner模型 Base——VAE Base——U-Net Base——Text Encoder Refiner GPT补充【TODO】 SDXL官方…

计算机网络 —— HTTPS 协议

前一篇文章&#xff1a;计算机网络 —— HTTP 协议&#xff08;详解&#xff09;-CSDN博客 目录 前言 一、HTTPS 协议简介 二、HTTPS 工作过程 1.对称加密 2.非对称加密 3.中间人攻击 4.引入证书 三、HTTPS 常见问题 1.中间人能否篡改证书&#xff1f; 2.中间人能否调…

YonBuilder移动开发——调用手机系统的浏览器打开网页

概述 在YonBuilder移动开发中&#xff0c;可以通过使用引擎提供的 api.openWin 或者 api.openFrame 函数方法通过内置的浏览器引擎在App内部打开相关的远程H5网站的网页。但是在实际项目开发中&#xff0c;可能会有一种需求&#xff0c;调用手机操作系统提供的系统浏览器去打开…

美畅物联丨视频接入网关如何配置 HTTPS 证书

在安防领域&#xff0c;视频接入网关&#xff08;Video Access Gateway&#xff0c;VAG&#xff09;是视频监控系统的重要组成部分&#xff0c;其职责是把视频数据从前端设备传输至后端服务器。配置HTTPS证书后&#xff0c;可对视频流进行加密传输&#xff0c;避免数据在网络传…

Redis原理—2.单机数据库的实现

大纲 1.Redis数据库的结构 2.读写Redis数据库键值时的处理 3.Redis数据库的构成 4.Redis过期键的删除策略 5.Redis的RDB持久化 6.Redis的AOF持久化 7.Redis的AOF重写机制 8.Redis持久化是影响其性能的高发地 9.Redis基于子进程实现持久化的使用建议 10.Redis持久化的…