如何自动化重构存在嵌套行的大型数据集
解决方案:将嵌套行结构的CSV转换为宽格式
以下提供几种可行的方案,覆盖Python、SQL和Excel Power Query三种工具,按需选择:
方案一:Python(灵活高效,适合大规模数据)
用Python的pandas库可以快速处理这种行关联转换,步骤如下:
- 安装pandas(如果没装):
pip install pandas
- 先把CSV文件下载到本地,然后运行以下代码:
import pandas as pd # 读取本地CSV文件,替换成你的实际文件路径 df = pd.read_csv("原数据.csv") # 标记主数据行(Name列非空的行) df['is_main'] = df['Name'].notna() # 给每个主行分配组ID,向下填充组ID到后续子行 df['group_id'] = df['is_main'].cumsum() # 按组分组,将Spawn Weighting列转成宽格式 wide_df = df.groupby('group_id').agg( Name=('Name', 'first'), Lvl=('Lvl', 'first'), Stats=('Stats', 'first'), Tier=('Tier', 'first'), Weight1=('Spawn Weighting', lambda x: x.iloc[0] if len(x)>=1 else None), Weight2=('Spawn Weighting', lambda x: x.iloc[1] if len(x)>=2 else None), Default=('Spawn Weighting', lambda x: x.iloc[2] if len(x)>=3 else None) ).reset_index(drop=True) # 保存为新CSV wide_df.to_csv("转换后的宽格式.csv", index=False)
这段代码会自动把每个主行下面的子行Spawn Weighting值依次放到Weight1、Weight2、Default列,完全匹配你要的格式。
方案二:SQL(适合熟悉数据库的场景)
以SQLite为例(无需额外安装数据库服务),步骤如下:
把CSV文件下载到本地,导入SQLite数据库:
- 用SQLiteStudio或命令行工具创建数据库,导入CSV时注意保留所有列,添加一个自增的
row_num列(用来标记行顺序)。
- 用SQLiteStudio或命令行工具创建数据库,导入CSV时注意保留所有列,添加一个自增的
执行以下SQL查询(替换
your_table_name为你的表名):
WITH ranked_rows AS ( -- 标记每个主行的起始位置,给每个组分配ID SELECT *, SUM(CASE WHEN Name IS NOT NULL THEN 1 ELSE 0 END) OVER (ORDER BY row_num) AS group_id FROM your_table_name ), grouped_weights AS ( -- 给每个组内的子行编号(1、2、3) SELECT group_id, "Spawn Weighting" AS weight_value, ROW_NUMBER() OVER (PARTITION BY group_id ORDER BY row_num) AS weight_rank FROM ranked_rows ) -- 把多行的权重转成列,和主行合并 SELECT r.Name, r.Lvl, r.Stats, r.Tier, MAX(CASE WHEN g.weight_rank=1 THEN g.weight_value END) AS Weight1, MAX(CASE WHEN g.weight_rank=2 THEN g.weight_value END) AS Weight2, MAX(CASE WHEN g.weight_rank=3 THEN g.weight_value END) AS Default FROM ranked_rows r LEFT JOIN grouped_weights g ON r.group_id = g.group_id WHERE r.Name IS NOT NULL -- 只保留主行 GROUP BY r.group_id, r.Name, r.Lvl, r.Stats, r.Tier ORDER BY r.row_num;
执行后导出结果即可得到宽格式数据。
方案三:Excel Power Query(无需编程,适合Excel用户)
如果不想写代码,用Excel自带的Power Query可以可视化完成转换:
把CSV文件下载到本地,打开Excel,点击「数据」选项卡 → 「获取数据」→ 「从文件」→ 「从CSV」,选择你的CSV文件导入。
在Power Query编辑器中:
- 点击「添加列」→ 「索引列」→ 「从1开始」。
- 添加自定义列,标记主行:输入公式
= if [Name] <> null then 1 else 0,命名为IsMain。 - 添加自定义列,生成组ID:输入公式
= List.Sum(List.Range(#"添加的索引"[IsMain],0,[索引])),命名为GroupID。 - 选中
Name、Lvl、Stats、Tier列,右键 → 「填充」→ 「向下」,把主行信息填充到子行。 - 点击「转换」选项卡 → 「分组依据」,分组列选
GroupID,操作选「所有行」,新列名设为Rows。 - 点击
Rows列标题旁的箭头,只勾选「Spawn Weighting」后展开;展开后再次点击列标题箭头 → 「转置」。 - 把转置后的列重命名为
Weight1、Weight2、Default,删除多余的索引和分组列。 - 点击「关闭并上载」,结果就会导入Excel工作表。
内容的提问来源于stack exchange,提问作者Yoeri
相关产品推荐
相关产品推荐

