首页 > 编程语言 >盘点一个Python自动化办公Excel数据处理的需求

盘点一个Python自动化办公Excel数据处理的需求

时间:2024-02-23 19:45:31浏览次数:30  
标签:sheet name Python excel Excel 盘点 pd data

大家好,我是Python进阶者。

一、前言

前几天在Python白银交流群【干锅牛蛙】问了一个Python处理Excel数据的问题。问题如下:有两个问题哈:1、表头有合并单元格识别不出来,如何处理类似下图

2、遇到单元格有公式自动识别成了0,如何处理,保留计算后的值,类似下图

image.png

附上他自己的代码如下:

目前代码:import pandas as pd
import os

# 读取所有xlsx文件并逐个合并子表
folder_path = r'C:/Users/mengxianqiao/merge_excel_files/测试数据'  # 替换成实际的文件夹路径

all_data = {}

# 遍历文件
for file_name in os.listdir(folder_path):
    if file_name.endswith(".xlsx"):
        file_path = os.path.join(folder_path, file_name)  # 拼接绝对路径
        xls = pd.ExcelFile(file_path)  # 创建excel对象
        # 遍历sheet
        for sheet_name in xls.sheet_names:
            if sheet_name not in all_data:  # 如果sheet不存在,在字典中创建新sheet
                all_data[sheet_name] = pd.DataFrame()

            # 获取表头行数(默认为1)
            header_rows = pd.read_excel(file_path, sheet_name=sheet_name, nrows=1).shape[0]
            # print(header_rows)
            # 读取数据时跳过已经读取过的表头行
            sheet_data = pd.read_excel(file_path, sheet_name=sheet_name, skiprows=range(1, header_rows+1))
            # print(sheet_data)
            all_data[sheet_name] = pd.concat([all_data[sheet_name], sheet_data], ignore_index=True)

# 将所有合并后的数据保存到一个整体的CSV文件中
output_csv = r"C:/Users/mengxianqiao/merge_excel_files/测试数据/汇总.xlsx"  # 替换成实际的输出文件路径

with pd.ExcelWriter(output_csv, engine='openpyxl') as writer:
    for sheet_name, df in all_data.items():
        df.to_excel(writer, sheet_name=sheet_name, index=False)

print("数据已成功合并并保存到总表.xlsx。")

二、实现过程

这里【瑜亮老师】、【鶏啊鶏。】、【Python进阶者】都给了一个思路,如下图所示:读取的时候不读取表头,跳过前2行。这个方法可以,上次处理那个民评议表,跳过了前四行。

image.png

这就是直接跳过,然后手动加一行表头。代码如下:

import pandas as pd
import pathlib
# 获取文件夹中每个Excel文件的路径
folder = r"C:\Users\Desktop\民主评议表"
excel_files = pathlib.Path(folder).glob('*.xls')
header = ['姓名', '以学铸魂', '以学增智', '以学正风', '以学促干']
data = []
for i in excel_files:
    # 读取Excel文件,并跳过前4行,使用前5列数据
    df = pd.read_excel(i, skiprows=4, header=None, index_col=0, usecols="A:F")
    df.dropna(inplace=True)
    df.columns = header

如果是openpyxl的话,读取的时候,有个data_only=True参数,得到的就是数值了。之前在钻石群里有人问过。

image.png

后来【论草莓如何成为冻干莓】还给了一个思路如下:

image.png

代码如下:

import numpy as np
import pandas as pd


df = pd.DataFrame(np.random.randint(1, 10, size=(20, 10)))

with pd.ExcelWriter('写入合并表头.xlsx', engine='openpyxl') as writer:
    book = writer.book
    sheet_name = '写入合并表头'
    df.to_excel(writer, sheet_name=sheet_name, index=False, startrow=1)
    sh = book[sheet_name]
    sh['A1'] = '表头合并'
    sh.merge_cells(f'A1:H1')  # 合并A1到H1的单元格

实现效果如下:

image.png

【黄志诚】感慨道:现在就感觉用pandas分析,用openpyxl美化,写入。

如果你也有类似这种Python相关的小问题,欢迎随时来交流群学习交流哦,有问必答!

三、总结

大家好,我是皮皮。这篇文章主要盘点了一个Python处理Excel数据的问题,文中针对该问题,给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。

最后感谢粉丝【干锅牛蛙】提出的问题,感谢【瑜亮老师】、【鶏啊鶏。】、【Python进阶者】、【论草莓如何成为冻干莓】给出的思路,感谢【莫生气】、【黄志诚】等人参与学习交流。

【提问补充】温馨提示,大家在群里提问的时候。可以注意下面几点:如果涉及到大文件数据,可以数据脱敏后,发点demo数据来(小文件的意思),然后贴点代码(可以复制的那种),记得发报错截图(截全)。代码不多的话,直接发代码文字即可,代码超过50行这样的话,发个.py文件就行。

image.png

标签:sheet,name,Python,excel,Excel,盘点,pd,data
From: https://www.cnblogs.com/dcpeng/p/18030267

相关文章

  • 基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的快递包裹检测系统(Python+PySide6界面+训练代码)
    摘要:本文介绍了一种基于深度学习的快递包裹检系统系统的代码,采用最先进的YOLOv8算法并对比YOLOv7、YOLOv6、YOLOv5等算法的结果·,能够准确识别图像、视频、实时视频流以及批量文件中的快递包裹。文章详细解释了YOLOv8算法的原理,并提供了相应的Python实现代码、训练数据集,以及基于P......
  • python基础学习8-网络协议、进程与线程
    UDP协议用户数据包协议socketbind()sendall()recvfrom()sendto()close()TCP服务器端流程:使用socket类创建一个套接字对象使用bind((ip,port))方法绑定ip地址和端口号使用listen()方法开始TCP监听使用accept()方法等待客户端的连接使用recv()/send()方法接受发送......
  • 基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的智能监考系统(Python+PySide6界面+训练代码)
    摘要:本文介绍了一种基于深度学习的智能监考系统系统的代码,采用最先进的YOLOv8算法并对比YOLOv7、YOLOv6、YOLOv5等算法的结果·,能够准确检测图像、视频、实时视频流以及批量文件中的目标。文章详细解释了YOLOv8算法的原理,并提供了相应的Python实现代码、训练数据集,以及基于PySide6......
  • grpc python 实践
    目录前言项目结构依赖安装简单Demo接口定义编译proto服务端的实现客户端的实现进阶Demo接口定义服务端的实现客户端的实现使用HTTP作为中介服务端的实现客户端的实现原文链接:1.使用Python实现gRPC通信前言本文主要讲述如何使用Python实现gRPC通信,并通过三个例子,由浅入深地进行......
  • 【Python&GIS】Python线矢量等距离取点/线等分取点&点创建矢量面
    ​        不多说,这是之前项目需求的代码,已经是去年的了一直没来的及发,今天抽出来一丢丢的空挡发一下。主要就是利用线矢量等距离生成点矢量,或者直接将线矢量等分生成点矢量,这个需求其实极限一下就是线转点了(将距离设置小一点)。顺便将点生成矩形面的代码也给出来,这里的......
  • python处理栅格数据
    字节序列:ReadRaster([xoff],[yoff],[xsize],[ysize],[buf_xsize],[buf_ysize],[buf_type],[band_list],[buf_pixel_space],[buf_line_space],[buf_band_space])xoff是列读取起点,默认值为0。yoff是行读取起点,默认值为0。xsize是读取的列数,默认为全部读取。ysize是读取的......
  • python 面向对象(进阶篇)
    上一篇《Python面向对象(初级篇)》文章介绍了面向对象基本知识:面向对象是一种编程方式,此编程方式的实现是基于对类和对象的使用类是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中)对象,根据模板创建的实例(即:对象),实例用于调用被包装在类中的函......
  • python使用栅格计算器
    重采样是指根据一类象元的信息内插出另一类象元信息的过程。在遥感中,重采样是从高分辨率遥感影像中提取出低分辨率影像的过程。常用的重采样方法有最邻近内插法、双线性内插法和三次卷积法内插。  ReadAsArray函数可以重采样读取的数据,并且指定输出缓冲区大小或传递一个已有......
  • UtilMeta - 简洁高效的 Python 后端元框架
    最近开源了我开发多年的一个Python后端框架:UtilMeta项目介绍UtilMeta是一个用于开发API服务的后端元框架,基于Python类型注解标准高效构建声明式接口与ORM查询,能够自动解析请求参数与生成OpenAPI文档,高效开发RESTful接口,产出的代码简洁清晰,并且支持使用主流Python......
  • python调用Javascript实践
    一、背景知识1、Node.jsjavacript的运行环境有两个:浏览器、node.jsNode.js是一个开源与跨平台的JavaScript运行时环境。它是一个可用于几乎任何项目的流行工具!Node.js在浏览器外运行V8JavaScript引擎(GoogleChrome的内核)。这使Node.js表现得非常出色。运行js的命......