我有一个输入Excel电子表格,如下所示:
key | value | other data
------------------------- ...
k1 | v1 | d1
| v2 |
| v3 |
k2 | v2 | d2
| v5 |
k3 | v1 | d3
值存储在一个空的空间中,除了value列之外,该行位于与匹配键匹配的行的正下方,并且可以有任意数量的值绑定到该键,但是极不可能超过三个。所有键都是唯一的,“其他数据”可能会丢失或重复,大约有十二个值和数千个数据行。
我需要将输入表转换为以下格式:
k1 | v1,v2,v3 | d1 | ...
k2 | v2,v5 | d2 | ...
k3 | v1 | d3 | ...
我已经用openpyxl和一个简单的迭代算法解决了这个问题,我想知道是否有更优雅的方法可以使用Pandas的DataFrame操作工具来做到这一点?我搜索了Pandas数据操作教程,但是我可以找到大部分可用的东西,groupby()
而agg()
这似乎不是我的情况,因为我没有专栏文章,我只能对其进行汇总,并且只能依靠始终唯一的键。
我现在使用的正面解决方案:
import openpyxl
wb = openpyxl.load_workbook('in.xlsx')
ws = wb['Sheet1']
row_data = None
out_list = list()
i = 2
while i < ws.max_row + 1:
if ws[i][0].value is not None:
if row_data is not None:
out_list += [row_data]
row_data = list(ws[i])
else:
row_data[1].value = f'{row_data[1].value}' + f',{ws[i][1].value}'
i += 1
out_list += [list(ws[ws.max_row])] # append the last row to the output
wb_out = openpyxl.Workbook()
ws_out = wb_out.active
for row in out_list:
ws_out.append([cell.value for cell in row])
wb_out.save('out.xlsx')
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句