首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

会当凌绝顶,一览众山小。

大家好,我是Python进阶者。

一、前言

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

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

附上他自己的代码如下:

目前代码: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行。这个方法可以,上次处理那个民评议表,跳过了前四行。

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

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参数,得到的就是数值了。之前在钻石群里有人问过。

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

代码如下:

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的单元格

实现效果如下:

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

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OncISg1qSwIMkjKd7ol3iQDg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券
http://www.vxiaotou.com