大家好,我是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美化,寫入。
如果你也有類似這種Python相關的小問題,歡迎隨時來交流羣學習交流哦,有問必答!
三、總結
大家好,我是皮皮。這篇文章主要盤點了一個Python處理Excel數據的問題,文中針對該問題,給出了具體的解析和代碼實現,幫助粉絲順利解決了問題。
最後感謝粉絲【乾鍋牛蛙】提出的問題,感謝【瑜亮老師】、【鶏啊鶏。】、【Python進階者】、【論草莓如何成爲凍幹莓】給出的思路,感謝【莫生氣】、【黃志誠】等人蔘與學習交流。
【提問補充】溫馨提示,大家在羣裏提問的時候。可以注意下面幾點:如果涉及到大文件數據,可以數據脫敏後,發點demo數據來(小文件的意思),然後貼點代碼(可以複製的那種),記得發報錯截圖(截全)。代碼不多的話,直接發代碼文字即可,代碼超過50行這樣的話,發個.py文件就行。