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

Python无需循环将CSV扁平化单行数据重构为原始DataFrame的方法

百万行扁平化CSV还原多DataFrame的无循环高效方案

核心实现完全基于Pandas向量化操作,无Python层循环,性能是逐行循环实现的百倍以上,10*10维度的原始表、百万行CSV的处理耗时仅和CSV读取耗时相当。

实现步骤

  1. 读取CSV并拆分列名为多级索引
    将遵循SX_R_C规则的列名按下划线拆分为三级索引,分别对应原始表类型、原始表行标识、原始表列标识:
import pandas as pd

# 读取CSV,保留原始行索引
df = pd.read_csv("your_file.csv", index_col=0)
# 拆分列名为三级MultiIndex
df.columns = df.columns.str.split("_", expand=True)
# 给三级索引命名方便后续操作
df.columns.names = ["type", "row", "col"]
  1. 重塑数据结构
    通过stack操作将列维度的行、列标识转移到行维度,再按原始表类型拆分:
# 将行、列标识从列维度堆叠到行维度
reshaped = df.stack(level=["row", "col"])

# 拆分得到S1、S2两类原始表的全量数据
s1_all = reshaped.xs("S1", level="type", axis=1).unstack("col")
s2_all = reshaped.xs("S2", level="type", axis=1).unstack("col")
  1. 提取指定索引的原始DataFrame
    直接通过原始CSV的行索引即可提取对应还原后的DataFrame:
# 提取索引1657对应的S1原始表
s1_1657 = s1_all.loc[1657]
# 提取索引1657对应的S2原始表
s2_1657 = s2_all.loc[1657]

按给出的示例数据,上述操作得到的s1_1657和s2_1657完全符合预期输出。

可选批量导出优化

如果需要批量导出所有行对应的原始表,可直接用Pandas优化过的分组迭代,避免自行写循环的性能损耗:

# 迭代所有原始CSV行索引对应的S1表
for idx, s1_df in s1_all.groupby(level=0):
    # 按需处理每个s1_df,比如存文件、做计算等
    pass

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:06:05