盤點一個Python自動化辦公Excel數據處理的需求

大家好,我是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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章