xlwings 合并相邻相同元素的单元格 验证缺失值对其影响
  X5zJxoD00Cah 2023年11月02日 36 0

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()
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  X5zJxoD00Cah   2023年12月11日   26   0   0 知乎Python迭代器
  X5zJxoD00Cah   2023年12月12日   34   0   0 Python.net
X5zJxoD00Cah