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

如何在检测到特定字符串时拆分DataFrame并生成多个子DataFrame

拆分结构化大DataFrame为多个子数据集

问题描述

现有结构如下的大DataFrame(实际包含约24K列):

col_1         col_2                            col_3

NaN            NaN                              NaN
Date         21-04-2022                         NaN
Id            Name                            status
01            A11                              Pass
02            A22                              F_1
03            A33                              P_2
SUMMARY    'Total :$20  Approved $ 10'         NaN
NaN            NaN                             NaN
Date         22-04-2022                        NaN
Id            Name                           status
04            A12                              P_2
05            A23                              F_1
06            A34                              P_2
SUMMARY    'Total :$30  Approved $ 20'         NaN

需要将其拆分为多个子DataFrame,每个子DataFrame包含对应日期块的表头、数据行与汇总行,示例如下:

df_1:

Id            Name                            status
01            A11                              Pass
02            A22                              F_1
03            A33                              P_2
SUMMARY    'Total :$20  Approved $ 10'         NaN

df_2:

Id            Name                           status
04            A12                              P_2
05            A23                              F_1
06            A34                              P_2
SUMMARY    'Total :$30  Approved $ 20'         NaN

解决方案

通过定位数据块的起始(表头行)与结束(汇总行)索引,批量提取并生成子DataFrame,具体实现如下:

代码实现

import pandas as pd

# 假设原始数据已加载为DataFrame df,以下为模拟示例数据
data = [
    [pd.NA, pd.NA, pd.NA],
    ['Date', '21-04-2022', pd.NA],
    ['Id', 'Name', 'status'],
    ['01', 'A11', 'Pass'],
    ['02', 'A22', 'F_1'],
    ['03', 'A33', 'P_2'],
    ['SUMMARY', "'Total :$20  Approved $ 10'", pd.NA],
    [pd.NA, pd.NA, pd.NA],
    ['Date', '22-04-2022', pd.NA],
    ['Id', 'Name', 'status'],
    ['04', 'A12', 'P_2'],
    ['05', 'A23', 'F_1'],
    ['06', 'A34', 'P_2'],
    ['SUMMARY', "'Total :$30  Approved $ 20'", pd.NA]
]
df = pd.DataFrame(data, columns=['col_1', 'col_2', 'col_3'])

# 定位所有表头行(col_1为'Id'的行)的索引
header_indices = df[df['col_1'] == 'Id'].index.tolist()
# 定位所有汇总行(col_1为'SUMMARY'的行)的索引
summary_indices = df[df['col_1'] == 'SUMMARY'].index.tolist()

# 存储所有子DataFrame的列表(避免大量单独命名变量,更易管理)
sub_dfs = []

# 遍历每个数据块的起始与结束索引
for header_idx, summary_idx in zip(header_indices, summary_indices):
    # 获取当前块的列名(取自表头行)
    block_columns = df.loc[header_idx].tolist()
    # 提取当前块的所有数据行(表头行下一行到汇总行)
    block_rows = df.loc[header_idx + 1 : summary_idx].values.tolist()
    # 创建子DataFrame并添加到列表
    sub_df = pd.DataFrame(block_rows, columns=block_columns)
    sub_dfs.append(sub_df)

# 访问子DataFrame示例:sub_dfs[0]对应df_1,sub_dfs[1]对应df_2
print(sub_dfs[0])

说明

  1. 高效定位:通过布尔索引快速找到所有表头行与汇总行的索引,避免逐行遍历,适配24K列的大数据集。
  2. 批量处理:将所有子DataFrame存入列表sub_dfs,无需手动命名大量变量,便于后续批量操作(如遍历分析、保存文件等)。
  3. 结构匹配:自动将每个块的表头行设置为子DataFrame的列名,完全匹配需求中的子数据集结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:55:49