文件按关键字分组-切割-染色-写入excel

1. 背景

        针对下面的文件data.csv,首先根据fid进行排序,然后分组,使相同fid的记录放到同一个excel文件中,并对每列重复的数据元素染上红色。

fid,user_id
-1000078398032092029,230410010036537520
-1000078398032092029,230423010026993942
-1000078398032092029,230505010027684603
-101241766345369238,210911010005526495
-101241766345369238,211017010017923011
-101241766345369238,230113010029633164
-101241766345369238,230514010028256452
-101241766345369238,230518010036813773
-1045165137456710,220401010038956742
-1045165137456710,220401010038956742
-1050918014514687463,210805010001898014
-1050918014514687463,210805010001898014
-111(手动添加一个结束标志)

2. 分组切割文件

import pandas as pd
pd.set_option('display.max_rows', None)# 根据fid对文件进行分割,每个fid一个文件
def split_df_by_fid():df = pd.read_csv('data.csv', dtype=str)row_split_list = []  # 记录分割点索引current_fid = '-1000078398032092029'  # 第一个fidstart = 0end = startcnt = 1  # 记录当前是第几个分割子文件for fid in df['fid']:if fid != current_fid:row_split_list.append((start, end))# 当前fid组写入一个新文件df[start:end].to_csv('data_split/' + str(cnt) + '.csv', index=0)cnt += 1current_fid = fidstart = endend += 1print("总文件数: ", len(row_split_list))print(row_split_list)# [(0, 3), (3, 8), (8, 10), (10, 12)]

输出

3. 染色-写入excel

1. 找到同列重复元素

def group_by_find_duplicate_values(group_df: pd.DataFrame, col: str) -> list:value_counts = group_df[col].value_counts().reset_index()return value_counts[value_counts[col] > 1]['index'].to_list()

2. 插入图片

def inset_a_img(row_index, col_index, img_name):image_path = os.path.join("data_img/", img_name.replace('/', '_'))h, w, *_ = cv2.imread(image_path).shapescale = CEIL_HEIGHT * 1.3 / hSHEET.insert_image(row_index, col_index, image_path,  # x_offset可调整x轴图片偏移{'x_offset': 0, 'y_offset': 0, 'x_scale': scale, 'y_scale': scale, 'positioning': 1})

3. 同列相同元素染色

# -*- coding: utf-8 -*-
import os
import cv2
import tqdm
import pandas as pd
import xlsxwriter
CEIL_HEIGHT = 156def write_color():df = pd.read_csv(input_file, dtype=str)for i, col in enumerate(df.columns):SHEET.write(0, i, col)  # 第0行第i列插入表头字段try:for i, line in tqdm.tqdm(enumerate(df.itertuples())):  # tqdm: 显示进度条temp_df = df[df['fid'] == line.fid]for j, col in enumerate(df.columns):duplicate_values = group_by_find_duplicate_values(temp_df, col)content = str(df.iloc[i, j])# 染色cell_format = BOOK.add_format({'font_color': 'red' if (content in duplicate_values and j > 0) else 'black'})if col not in ('face_path', 'ocr_path'):# SHEET.write(*(i + 1, j), content, cell_format)SHEET.write(i+1, j, content, cell_format)else:if col == 'face_path' and not pd.isna(line.face_path):inset_a_img(i+1, j, line.face_path)  # 为Nan的置空,不写入图片if col == 'ocr_path' and not pd.isna(line.ocr_path):inset_a_img(i+1, j+1-1, line.ocr_path)BOOK.close()except Exception as e:print(e)if __name__ == '__main__':for file in os.listdir('data_split'):input_file = 'data_split/' + fileoutput_file = 'data_split_xlsx/' + file.replace('csv', 'xlsx')BOOK = xlsxwriter.Workbook(output_file)SHEET = BOOK.add_worksheet('sheet1')SHEET.set_default_row(CEIL_HEIGHT)SHEET.set_column(0, 60, 25)  # 分别为要修改的起始列,终止列,设置的列宽write_color()

输出

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

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

相关文章

Gitlab 备份与恢复

备份 1、备份数据(手动备份) gitlab-rake gitlab:backup:create2、备份数据(定时任务备份) [rootlocalhost ]# crontab -l 00 1 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create 说明:每天凌晨1点备份数据…

什么是 HTTP 长轮询?

什么是 HTTP 长轮询? Web 应用程序最初是围绕客户端/服务器模型开发的,其中 Web 客户端始终是事务的发起者,向服务器请求数据。因此,没有任何机制可以让服务器在没有客户端先发出请求的情况下独立地向客户端发送或推送数据。 为…

Docker 全栈体系(八)

Docker 体系(高级篇) 六、Docker轻量级可视化工具Portainer 1. 是什么 Portainer 是一款轻量级的应用,它提供了图形化界面,用于方便地管理Docker环境,包括单机环境和集群环境。 2. 安装 官网 https://www.portain…

计算机视觉常用数据集介绍

1 MINIST MINIST 数据集应该算是CV里面最早流行的数据了,相当于CV领域的Hello World。该数据包含70000张手写数字图像,其中60000张用于train, 10000张用于test, 并且都有相应的label。图像的尺寸比较小, 为28x28。 数…

数据安全

数据的备份与恢复 1. 数据备份技术 任何数据在长期使用过程中,都存在一定的安全隐患。由于认为操作失误或系统故障,例如认为错误、程序出错、计算机失效、灾难和偷窃,经常造成数据丢失,给个人和企业造成灾难性的影响。在这种情况…

DPN(Dual Path Network)网络结构详解

论文:Dual Path Networks 论文链接:https://arxiv.org/abs/1707.01629 代码:https://github.com/cypw/DPNs MXNet框架下可训练模型的DPN代码:https://github.com/miraclewkf/DPN 我们知道ResNet,ResNeXt,D…

Android启动速度优化

本节主要内容:了解APP启动流程、启动状态、查看启动时间、CPU Profile定位启动耗时代码、StrictMode严苛模式检测不合理写法、解决启动黑白屏问题。 一、APP启动流程 ①用户点击桌面App图标,Launcher进程采用Binder IPC向system_server进程发起startAc…

DHCP部署与安全详解

文章目录 一、DHCP是什么?二、DHCP相关概念三、DHCP优点四、DHCP原理1. 客户机发送DHCP Discovery广播包(发现谁是DHCP服务器)2. 服务器响应DHCP Offer广播包3. 客户机发送DHCP Request广播包4. 服务器发送DHCP ACK广播包 五、DHCP续约六、部…

lc209.长度最小的子数组

暴力破解:二次for循环遍历num[i]...num[j],记录满足条件的最小长度 前缀和二分:前缀和降低计算num[i]...num[j]的时间复杂度 对前缀和数组中的每个数进行遍历,找到距离这个数满足条件的最小长度 前缀和数组单调递增,此…

【JAVA】java中的逻辑控制

作者主页:paper jie的博客 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文录入于《JAVASE语法系列》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精…

不同情境下沟通有哪些可用的工具箱?

在不同情境下,沟通的工具箱可以包括以下几个方面: 面对面交流:面对面交流是最直接和有效的沟通方式。可以通过面对面的会议、面谈或小组讨论等方式进行沟通。面对面交流可以更好地传递情感和非语言信息,有助于建立信任和理解。 …

SQL-每日一题【620.有趣的电影】

题目 某城市开了一家新的电影院,吸引了很多人过来看电影。该电影院特别注意用户体验,专门有个 LED显示板做电影推荐,上面公布着影评和相关电影描述。 作为该电影院的信息部主管,您需要编写一个 SQL查询,找出所有影片…

谈一谈缓存穿透,击穿,雪崩

缓存穿透 缓存穿透是指在使用缓存系统时,频繁查询一个不存在于缓存中的数据,导致这个查询每次都要通过缓存层去查询数据源,无法从缓存中获得结果。这种情况下,大量的请求会直接穿透缓存层,直接访问数据源,…

【前端知识】React 基础巩固(四十二)——React Hooks的介绍

React 基础巩固(四十二)——React Hooks的介绍 一、为什么需要Hook? Hook 是 React 16.8 的新增特性,它可以让我们在不编写class的情况下使用state以及其他的React特性(比如生命周期)。 class组件 VS 函数式组件: class的优势…

操作系统4

文件管理 文件的逻辑结构 文件的目录 文件的物理结构 文件存储空间管理 文件的基本操作

7.28 作业 QT

手动完成服务器的实现&#xff0c;并具体程序要注释清楚: widget.h: #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> //服务器类 #include <QTcpSocket> //客户端类 #include <QMessageBox> //对话框类 #include …

[数据集][目标检测]城市道路井盖破损丢失目标检测1377张

数据集制作单位&#xff1a;未来自主研究中心(FIRC) 数据集格式&#xff1a;Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件&#xff0c;仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数)&#xff1a;1377 标注数量(xml文件个数)&#xff1a;1377 标注类别数&a…

MOS管的体二极管是怎么形成的

一般MOS管的源极和漏极之间会存在体二极管&#xff0c;对于N沟道的MOS管&#xff0c;体二极管由源极指向漏极。 对于PMOS管&#xff0c;体二极管由漏极指向源极&#xff0c;那么MOS管为什么会有这个体二极管呢&#xff1f; 我们看到这个N沟道MOS管的结构&#xff0c;源极和漏极…

一起学算法(计算排序篇)

概念&#xff1a; 计数排序&#xff08;Counting sort&#xff09;是一个非基于比较稳定的线性时间的排序算法 非基于比较&#xff1a;之前学的排序都是通过比较数据的大小来实现有序的&#xff0c;比如希尔排序等&#xff0c;而计数排序不需要比较数据的大小而进行排序&…

2023年Q2京东小家电市场数据分析(京东数据运营)

伴随人们对生活品质追求的提高&#xff0c;以及拥有新兴消费理念的年轻人逐渐成为消费主力&#xff0c;功能新潮、外观精致的小家电经常在电商平台销售榜单里“榜上有名”。本期我们便一起来分析Q2京东小家电市场中&#xff0c;一些较为热门的精致生活小电的行业大盘变动情况。…