Python处理表格合并后 保留表格格式问题
表格合并去重后表格格式保留
(如我的1.xlsx里有颜色填充,我想要在合并的表格shuchu.xlsx中也有相应的填充颜色)
import pandas as pd
df1 = pd.read_excel('1.xlsx')
df2 = pd.read_excel(’2.xlsx')
df = pd.concat([df1, df2], ignore_index=True)
newDf = df.drop_duplicates(subset='流水号', ignore_index=True)
df.to_excel('shuchu.xlsx',index=False)
import openpyxl
# 定义一个列表,用来存储所有要合并的Excel文件名
file_names = ["file1.xlsx", "file2.xlsx", "file3.xlsx"]
# 创建一个新的Excel文件作为合并后的文件
merged_file = openpyxl.Workbook()
# 遍历所有要合并的Excel文件
for file_name in file_names:
# 打开要合并的Excel文件
wb = openpyxl.load_workbook(file_name)
# 遍历所有的工作表
for sheet_name in wb.sheetnames:
# 获取要合并的工作表
sheet = wb[sheet_name]
# 获取工作表的所有行和列
rows = sheet.rows
columns = sheet.columns
# 创建一个新的工作表,并将原工作表的名称设置为新工作表的名称
new_sheet = merged_file.create_sheet(title=sheet_name)
# 遍历原工作表的所有单元格,并将其复制到新工作表
for row in rows:
row_values = []
for cell in row:
row_values.append(cell.value)
new_sheet.append(row_values)
# 设置新工作表的列宽度和行高度等其他格式
for column in columns:
new_sheet.column_dimensions[column[0].column_letter].width = sheet.column_dimensions[column[0].column_letter].width
for i in range(1, sheet.max_row+1):
new_sheet.row_dimensions[i].height = sheet.row_dimensions[i].height
# 删除新工作表默认创建的第一张工作表
merged_file.remove(merged_file.active)
# 将合并后的Excel文件保存并关闭
merged_file.save("merged_file.xlsx")
merged_file.close()
参考GPT和自己的思路:如果想要保留原本表格填充颜色等格式,建议使用OpenPyXL库来操作Excel文件。具体操作是:
import openpyxl
wb = openpyxl.load_workbook('shuchu.xlsx')
ws = wb.active
data = {}
for row in ws.iter_rows():
for cell in row:
data[cell.coordinate] = cell.value
for row in ws.iter_rows():
for cell in row:
if cell.fill.start_color.index != '00000000':
# 如果单元格有填充颜色,设置新单元格的填充颜色
new_cell = ws.cell(row=cell.row, column=cell.column)
new_cell.fill = cell.fill
new_cell.value = data[cell.coordinate]
else:
# 如果单元格没有填充颜色,直接设置新单元格的值
new_cell = ws.cell(row=cell.row, column=cell.column)
new_cell.value = data[cell.coordinate]
wb.save('shuchu.xlsx')
以上就是保留原本表格填充颜色等格式的Python处理表格合并后的操作方法。
参考GPT和自己的思路:如果想要保留表格填充颜色,可以使用第三方库openpyxl来实现。可以使用以下代码:
import pandas as pd
from openpyxl import load_workbook
df1 = pd.read_excel('1.xlsx')
df2 = pd.read_excel('2.xlsx')
df = pd.concat([df1, df2], ignore_index=True)
newDf = df.drop_duplicates(subset='流水号', ignore_index=True)
writer = pd.ExcelWriter('shuchu.xlsx', engine='openpyxl')
book = load_workbook('shuchu.xlsx')
writer.book = book
newDf.to_excel(writer, index=False, sheet_name='Sheet1')
worksheet = writer.sheets['Sheet1']
color_map = {'Red': 'FFFF0000', 'Green': 'FF00CD00'} # 填充颜色对应的RGB值
for idx, row in newDf.iterrows():
for col_num, value in enumerate(row):
cell = worksheet.cell(row=idx+2, column=col_num+1)
if cell.fill.start_color.index in color_map.values():
for k, v in color_map.items():
if cell.fill.start_color.index == v:
cell.fill = PatternFill(start_color=v,
end_color=v,
fill_type='solid')
break
writer.save()
这个代码中,我们使用openpyxl来读取已存在的Excel文件,在新Sheet中写入新数据,并遍历该Sheet中的单元格,如果该单元格的填充颜色对应color_map中的RGB值,则将该单元格填充成对应RGB颜色。最后保存文件即可。
来自NewBing和LP的编写:
import pandas as pd
from openpyxl import load_workbook
from openpyxl.styles import PatternFill
def copy_fill(from_cell, to_cell):
if from_cell.fill.start_color.index != '00000000':
fill = PatternFill(start_color=from_cell.fill.start_color.index,
end_color=from_cell.fill.start_color.index,
fill_type="solid")
to_cell.fill = fill
# 读取数据
df1 = pd.read_excel('1.xlsx')
df2 = pd.read_excel('2.xlsx')
# 合并数据
df = pd.concat([df1, df2], ignore_index=True)
newDf = df.drop_duplicates(subset='流水号', ignore_index=True)
# 保存数据
newDf.to_excel('shuchu.xlsx', index=False)
# 打开源工作簿和目标工作簿
wb1 = load_workbook('1.xlsx')
wb2 = load_workbook('shuchu.xlsx')
# 获取工作表
sheet1 = wb1.active
sheet2 = wb2.active
# 遍历单元格,复制颜色
for i in range(1, sheet1.max_row+1):
for j in range(1, sheet1.max_column+1):
copy_fill(sheet1.cell(row=i, column=j), sheet2.cell(row=i, column=j))
# 保存目标工作簿
wb2.save('shuchu.xlsx')
这段代码假设你的源工作簿和目标工作簿的数据结构是完全相同的,即它们具有相同的行数和列数。如果它们的结构不同,你可能需要调整代码以适应你的实际情况。
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
要保留表格格式,可以使用 openpyxl
模块。
openpyxl
:pip install openpyxl
openpyxl
中的样式对象 openpyxl.styles
:# 导入 openpyxl 模块中的样式库
from openpyxl.styles import PatternFill, Border, Side, Alignment, Protection, Font
# 创建红色背景颜色填充对象
red_fill = PatternFill(start_color='FFC7CE', end_color='FFC7CE', fill_type='solid')
# 创建蓝色字体对象
blue_font = Font(color='FF0000')
# 样式对象
style_red = NamedStyle(name='style_red')
style_red.font = blue_font
style_red.fill = red_fill
# 获取 Pandas 对象
df1 = pd.read_excel('1.xlsx')
df2 = pd.read_excel('2.xlsx')
# 将上面创建的样式对象写到新的 Excel 文件中
with pd.ExcelWriter('shuchu.xlsx', engine='openpyxl') as writer:
writer.book = load_workbook('shuchu.xlsx')
style_red = writer.book.add_named_style(style_red)
# 将 Pandas 对象写入新文件中,并设置样式
df1.to_excel(writer, sheet_name='Sheet1', index=False, startrow=0, startcol=0)
worksheet = writer.sheets['Sheet1']
worksheet.conditional_formatting.add('C1:C{}'.format(len(df1)+1), CellIsRule(operator='lessThan', formula=['10000'], stopIfTrue=False, fill=red_fill))
df2.to_excel(writer, sheet_name='Sheet1', index=False, startrow=len(df1)+1, startcol=0)
worksheet = writer.sheets['Sheet1']
worksheet.conditional_formatting.add('C{}:C{}'.format(len(df1)+1, len(df1)+len(df2)+1), CellIsRule(operator='greaterThan', formula=['50000'], stopIfTrue=False, font=blue_font))
上面的示例代码:
load_workbook
函数用于加载已有的 Excel 文件,以便向其中添加样式;writer.book.add_named_style
函数添加自定义命名的样式;conditional_formatting.add
函数可用于实现基于单元格值的不同格式设置;此外,上述示例中的样式可以按照需求修改为其他颜色和样式。
如果我的回答解决了您的问题,请采纳!
segment.append(seg)
return segment
感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的:
① 2000多本Python电子书(主流和经典的书籍应该都有了)
② Python标准库资料(最全中文版)
③ 项目源码(四五十个有趣且经典的练手项目及源码)
④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)
⑤ Python学习路线图(告别不入流的学习)
ess=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poaWd1aWd1,size_16,color_FFFFFF,t_70)
感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的:
① 2000多本Python电子书(主流和经典的书籍应该都有了)
② Python标准库资料(最全中文版)
③ 项目源码(四五十个有趣且经典的练手项目及源码)
④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)
⑤ Python学习路线图(告别不入流的学习)
以下答案由GPT-4.5Plus大模型(语音)与博主A努力中.......共同编写:
要保留合并后表格的格式,需要采取以下措施:
python
df1 = pd.read_excel('1.xlsx', dtype={'日期': str})
python
df = pd.concat([df1, df2], join='outer', ignore_index=True)
python
def color_red(val):
color = 'red' if val > 0 else 'black'
return 'color: %s' % color
df.style.apply(color_red, subset=['利润'])
或
python
df.loc[df['利润'] > 0, '利润'] = 'color: red'
python
writer = pd.ExcelWriter('output.xlsx', engine='openpyxl')
df.to_excel(writer, sheet_name='Sheet1')
writer.save()
openpyxl引擎可以最大限度保留DataFrame的格式和样式。
以上代码实现了在合并去重DataFrame后最大限度保留其格式的功能。