如何基于不同列数的DataFrame编写通用for循环遍历列写入worksheet
通用遍历不同列数的表写入Worksheet的方法
我有多个列数不同的表(以元组列表形式存储),之前针对不同列数写了不同的for循环来写入worksheet:
示例表
表1
| col1 | col2 | col3 |
|---|---|---|
| Hi | 1 | Jake |
| Bye | 2 | Mike |
| Red | Blue | Pink |
表2
| cl1 | cl2 | cl3 | c4 |
|---|---|---|---|
| Frank | Toy | Hello | Present |
| Bike | Ride | Blue | Mike |
| Red | Blue | Pink | Fred |
原有针对固定列数的循环代码
针对3列的表:
row = 1 col = 0 for col1, col2, col3 in table: worksheet.write(row, col, col1) worksheet.write(row, col + 1, col2) worksheet.write(row, col + 2, col3) row += 1
针对4列的表:
row = 1 col = 0 for cl1, cl2, cl3, cl4 in table: worksheet.write(row, col, cl1) worksheet.write(row, col + 1, cl2) worksheet.write(row, col + 2, cl3) worksheet.write(row, col + 2, cl3) # 此处疑似笔误,应对应col+3写入c4 row += 1
通用循环的实现与修正
原思路代码存在几个问题:col在每行结束后未重置为0、变量名elements重复使用,且元组列表结构不存在table.column.names属性。
修正后的通用代码可适配任意列数的表:
方法一:基础循环写法
row = 1 for row_data in table: col = 0 # 每行开始时重置列索引 for value in row_data: worksheet.write(row, col, value) col += 1 row += 1
方法二:用enumerate简化索引管理
# 行号从1开始,列号默认从0开始 for row_idx, row_data in enumerate(table, start=1): for col_idx, value in enumerate(row_data): worksheet.write(row_idx, col_idx, value)
这两种写法都会自动遍历每行的所有元素,无需针对列数修改代码。
内容的提问来源于stack exchange,提问作者David 54321
相关产品推荐
相关产品推荐

