xlwings 合并相邻相同元素的单元格
验证缺失值对其影响
先排序
再选择列
再合并相邻相同元素的单元格
验证:
列缺失
整行缺失
结论:
不影响
1 列缺失
import pandas as pd
import numpy as np
import xlwings as xw
# 先排序
# 分类列缺失
# 验证结果_不影响
df = pd.DataFrame({'分类': ['B', 'B', 'np.nan', 'np.nan', 'B', 'B', 'B', 'B'], '重量': range(8)})
# 使用xlwings
# 将df保存在工作簿'D:test.xlsx'的工作表'工作表1'中
# 自动将df['分类']列中的相邻的相同元素_合并单元格
app = xw.App(visible= True, add_book= True)
app.display_alerts = False # 关闭操作警告
app.screen_updating = True
wb = app.books[0]
sht = wb.sheets[0]
sht.name = '工作表1'
# 写入表格, 无行索引
sht.cells(1, 1).options(index=False).value = df
# 获取分类列的范围(除了列标题)
range_a = sht.cells(2, 1).expand('down')
print(range_a, range_a.value)
# 不影响获取整列数据, 直到最后一行
# <Range [工作簿1]工作表1!$A$2:$A$9> ['B', 'B', 'np.nan', 'np.nan', 'B', 'B', 'B', 'B']
# 合并相邻相同元素的单元格
# 取唯一值
list_sorted = sorted(set(range_a.value), key=range_a.value.index)
# 取相邻相同元素的索引位置
dict_example = {key+ 2: value for key, value in enumerate(range_a.value)} # excel行索引=python行索引+ 2 # (除了列标题)
for i in list_sorted:
dict_i = {key: value for key, value in dict_example.items() if (value == i)}
index_start = list(dict_i.keys())[0]
index_stop = list(dict_i.keys())[-1]
print(sht.range((index_start, 1),(index_stop, 1)))
sht.range((index_start, 1),(index_stop, 1)).api.Merge()
# <Range [工作簿1]工作表1!$A$2:$A$9>
# <Range [工作簿1]工作表1!$A$4:$A$5>
wb.close()
app.kill()
2 整行缺失
import pandas as pd
import numpy as np
import xlwings as xw
# 先排序
# 整行缺失
# 验证结果_不影响
df = pd.DataFrame({'分类': ['B', 'B', 'np.nan', 'np.nan', 'B', 'B', 'B', 'B'], '重量': ['B', 'B', 'np.nan', 'np.nan', 'B', 'B', 'B', 'B']})
# 使用xlwings
# 将df保存在工作簿'D:test.xlsx'的工作表'工作表1'中
# 自动将df['分类']列中的相邻的相同元素_合并单元格
# 使用xlwings
# 将df保存在工作簿'D:test.xlsx'的工作表'工作表1'中
# 自动将df['分类']列中的相邻的相同元素_合并单元格
app = xw.App(visible= True, add_book= True)
app.display_alerts = False # 关闭操作警告
app.screen_updating = True
wb = app.books[0]
sht = wb.sheets[0]
sht.name = '工作表1'
# 写入表格, 无行索引
sht.cells(1, 1).options(index=False).value = df
# 获取分类列的范围(除了列标题)
range_a = sht.cells(2, 1).expand('down')
print(range_a, range_a.value)
# 不影响获取整列数据, 直到最后一行
# <Range [工作簿1]工作表1!$A$2:$A$9> ['B', 'B', 'np.nan', 'np.nan', 'B', 'B', 'B', 'B']
# 合并相邻相同元素的单元格
# 取唯一值
list_sorted = sorted(set(range_a.value), key=range_a.value.index)
# 取相邻相同元素的索引位置
dict_example = {key+ 2: value for key, value in enumerate(range_a.value)} # excel行索引=python行索引+ 2 # (除了列标题)
for i in list_sorted:
dict_i = {key: value for key, value in dict_example.items() if (value == i)}
index_start = list(dict_i.keys())[0]
index_stop = list(dict_i.keys())[-1]
print(sht.range((index_start, 1),(index_stop, 1)))
sht.range((index_start, 1),(index_stop, 1)).api.Merge()
wb.close()
app.kill()