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

如何用Python以指定分隔符拆分DataFrame行并新增行且不影响其他列?

需求说明

需要将文本行:Basis of the Consolidated &lt;&gt; Financial Statements(实际对应Basis of the Consolidated <> Financial Statements)以&lt;&gt;(即<> )为分隔符拆分成两行,同时保留DataFrame中其他列的内容不变。

你尝试的错误代码

import math
for i in range(len(df5)):
    
    df5['text'].iloc[i]=str(df5['text'].iloc[i])
    if((math.isnan(df5['note_number'].iloc[i]==False)):
        a=str(df5['text'].iloc[i])
        a=a.strip()
        u=a.split('&lt;&gt;')
        if j<=(len(df5)):
            j=i+1
            df5['text'].iloc[i]=u[0]
            df5['text'].iloc[i]=u[1]

代码问题分析

你的代码存在几个明显问题:

  • 括号逻辑错误:math.isnan(df5['note_number'].iloc[i]==False)写法颠倒,应该先判断note_number是否为NaN再做比较,而且用Pandas自带的pd.notna()判断非空值更适配,无需额外导入math模块。
  • 未定义变量:j没初始化就直接使用,运行时会触发NameError。
  • 拆分逻辑错误:把拆分后的两部分都赋值给同一行的text列,等于覆盖了原内容,完全没实现新增行的效果。
  • 操作不规范:循环里直接用iloc修改单元格,效率低还容易触发Pandas警告,不符合Pandas向量式操作的规范。

正确实现方案

Pandas内置方法就能高效解决这类拆分新增行的需求,不用写繁琐的循环:

方法一:全量拆分(所有行按分隔符拆分)

import pandas as pd

# 1. 按分隔符拆分text列,得到列表格式的内容
df5['text'] = df5['text'].str.split('&lt;&gt;')
# 2. 将列表拆分成多行,自动保留其他列的对应值
df5 = df5.explode('text', ignore_index=True)
# 3. 去除每行文本的前后空格
df5['text'] = df5['text'].str.strip()

方法二:仅处理note_number非空的行

如果只有note_number不为空的行需要拆分,用以下代码:

import pandas as pd

# 筛选需要拆分的行,拆分后炸开成多行
split_part = df5[pd.notna(df5['note_number'])].assign(text=df5['text'].str.split('&lt;&gt;')).explode('text')
# 合并不需要拆分的行和拆分后的行
df5 = pd.concat([df5[pd.isna(df5['note_number'])], split_part]).reset_index(drop=True)
# 去除文本前后空格
df5['text'] = df5['text'].str.strip()

说明

  • str.split直接对整列做拆分,比循环逐行处理效率高很多。
  • explode方法会自动将列表类型的单元格拆分为多行,其他列的内容会同步重复,完美保留原数据的关联关系。
  • pd.notna()是专门针对Pandas缺失值的判断方法,比math.isnan更适配DataFrame场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:50:33