You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python将单行数据拆分为多行并导出至Excel?

问题描述

我有如下访客数据:

l = [
['Visitors', '1 February 2020', 'Saturday', 'Shop A', 'In', '100', '20', '30','150', 'Out', '90', '10', '15', '115'],
['Visitors', '1 February 2020', 'Saturday', 'Shop B', 'In', '20', '10', '40', '70', 'Out', '10', '9', '0', '19'],
['Visitors', '1 February 2020', 'Saturday', 'Shop C', 'In', '42', '18', '20', '80', 'Out', '40', '10', '20', '70'],
['Visitors', '1 February 2020', 'Saturday', 'Shop D', 'In', '0', '0', '0', '0', 'Out', '0', '0', '0', '0'],
['Visitors', '1 February 2020', 'Saturday', 'Shop E', 'In', '0', '0', '0', '0', 'Out', '0', '0', '0', '0'],
['Visitors', '1 February 2020', 'Saturday', 'Shop F', 'In', '20', '19', '11', '50', 'Out', '10', '9', '5', '24'],
['Visitors', '1 February 2020', 'Saturday', 'Shop G', 'In', '25', '8', '33', '66', 'Out', '20', '6', '30', '56'],
['Visitors', '1 February 2020', 'Saturday', 'Shop H', 'In', '180', '88', '6', '274', 'Out', '170', '80', '5', '255'],
['Visitors', '1 February 2020', 'Saturday', 'Shop I', 'In', '0', '0', '0', '0', 'Out', '0', '0', '0', '0'],
['Visitors', '1 February 2020', 'Saturday', 'Total', 'In', '387', '163', '140', '690', 'Out', '340', '124', '75', '539'],
]

原始数据的结构定义为:

[Ppl_type, Date, Weekday, Shop, In, Men, Women, Children, Total, Out, Men, Women, Children, Total]

需要将其转换为指定格式并导出到Excel,目标表头为:

header = ['Ppl_type', 'Date', 'Weekday', 'Shop', 'In/Out', 'Visitor_Type', 'Number']

转换规则:每个店铺对应6行数据——3行记录进入的访客类型(男性、女性、儿童),3行记录离开的访客类型(男性、女性、儿童)。我尝试用worksheet.write方法,但只能处理前4列,求Python实现方案。

解决方案

核心思路

先把原始数据逐条转换为目标格式的多行数据:

  1. 提取每条原始数据的公共字段:Ppl_type、Date、Weekday、Shop
  2. 分别处理「进入」和「离开」两个部分:
    • 「进入」部分对应原始数据的第5到第8位(索引4到7),分别对应In、男性、女性、儿童的数值
    • 「离开」部分对应原始数据的第9到第13位(索引8到12),分别对应Out、男性、女性、儿童的数值
  3. 对每个进出方向,生成3条记录,分别对应男性、女性、儿童的访客数

完整代码实现

先确保安装openpyxl库(处理Excel文件的常用工具):

pip install openpyxl

转换并导出的代码:

from openpyxl import Workbook

# 原始数据
l = [
['Visitors', '1 February 2020', 'Saturday', 'Shop A', 'In', '100', '20', '30','150', 'Out', '90', '10', '15', '115'],
['Visitors', '1 February 2020', 'Saturday', 'Shop B', 'In', '20', '10', '40', '70', 'Out', '10', '9', '0', '19'],
['Visitors', '1 February 2020', 'Saturday', 'Shop C', 'In', '42', '18', '20', '80', 'Out', '40', '10', '20', '70'],
['Visitors', '1 February 2020', 'Saturday', 'Shop D', 'In', '0', '0', '0', '0', 'Out', '0', '0', '0', '0'],
['Visitors', '1 February 2020', 'Saturday', 'Shop E', 'In', '0', '0', '0', '0', 'Out', '0', '0', '0', '0'],
['Visitors', '1 February 2020', 'Saturday', 'Shop F', 'In', '20', '19', '11', '50', 'Out', '10', '9', '5', '24'],
['Visitors', '1 February 2020', 'Saturday', 'Shop G', 'In', '25', '8', '33', '66', 'Out', '20', '6', '30', '56'],
['Visitors', '1 February 2020', 'Saturday', 'Shop H', 'In', '180', '88', '6', '274', 'Out', '170', '80', '5', '255'],
['Visitors', '1 February 2020', 'Saturday', 'Shop I', 'In', '0', '0', '0', '0', 'Out', '0', '0', '0', '0'],
['Visitors', '1 February 2020', 'Saturday', 'Total', 'In', '387', '163', '140', '690', 'Out', '340', '124', '75', '539'],
]

# 目标表头
header = ['Ppl_type', 'Date', 'Weekday', 'Shop', 'In/Out', 'Visitor_Type', 'Number']

# 初始化工作簿和工作表
wb = Workbook()
ws = wb.active
ws.title = "Visitor Data"

# 写入表头
ws.append(header)

# 遍历原始数据,转换格式
for row in l:
    # 提取公共字段
    ppl_type = row[0]
    date = row[1]
    weekday = row[2]
    shop = row[3]
    
    # 处理「进入」数据:生成男性、女性、儿童三条记录
    ws.append([ppl_type, date, weekday, shop, 'In', 'Men', row[5]])
    ws.append([ppl_type, date, weekday, shop, 'In', 'Women', row[6]])
    ws.append([ppl_type, date, weekday, shop, 'In', 'Children', row[7]])
    
    # 处理「离开」数据:生成男性、女性、儿童三条记录
    ws.append([ppl_type, date, weekday, shop, 'Out', 'Men', row[10]])
    ws.append([ppl_type, date, weekday, shop, 'Out', 'Women', row[11]])
    ws.append([ppl_type, date, weekday, shop, 'Out', 'Children', row[12]])

# 保存Excel文件
wb.save("visitor_report.xlsx")

代码说明

  1. 字段复用:每条原始数据的前4个字段是所有衍生记录的公共字段,直接提取复用即可
  2. 数据拆分:针对「进入」「离开」两个方向,分别取出对应性别/年龄段的数值,生成符合目标格式的行
  3. Excel写入:使用openpyxl的append方法可以直接将整行数据写入工作表,无需手动指定单元格索引,解决了worksheet.write逐个处理单元格的繁琐问题
  4. 结果验证:运行后会生成visitor_report.xlsx文件,每个原始行对应6条目标格式的记录,完全符合需求

内容的提问来源于stack exchange,提问作者poon cl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 16:39:21