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

Pandas DataFrame编辑值后无法保存:移除单元格指定标识符后文本失败问题求助

问题原因分析

这个问题我碰到过不少次,核心原因是你对iterrows()返回的row对象理解有误——它只是原DataFrame行的副本,不是直接引用。你在循环里修改row["Body2"],其实只是改了临时的副本,根本没触碰到原DataFrame的数据,所以最终Body2列还是全NaN。

解决方案1:修正循环逻辑

如果想保留原来的循环思路,只需要把对row["Body2"]的赋值改成直接操作原DataFrame的对应位置即可:

import pandas as pd
import numpy as np
df = pd.read_excel(r'Desktop\Trial.xlsx')
df["Body2"] = np.nan
substring = "____________"

for index, row in df.iterrows():
    if substring in row["Body"]:
        split_string = row["Body"].split(substring, 1)
        # 直接通过.loc定位原DataFrame的行和列进行赋值
        df.loc[index, "Body2"] = split_string[0]

print(df)

这样修改后,赋值操作会直接作用于原DataFrame,处理后的结果就能正常保存到Body2列里了。

解决方案2:使用Pandas矢量化操作(推荐)

Pandas的优势在于矢量化运算,相比iterrows()循环,这种方法速度更快、代码更简洁,尤其适合处理大数据量的场景:

import pandas as pd
import numpy as np
df = pd.read_excel(r'Desktop\Trial.xlsx')
substring = "____________"

# 用np.where实现条件赋值:包含子串则取分割后的第一部分,否则设为NaN
df["Body2"] = np.where(
    df["Body"].str.contains(substring),
    df["Body"].str.split(substring, n=1).str[0],
    np.nan
)

print(df)

如果你的Body列存在缺失值(NaN),可以先做个填充避免报错:

df["Body"] = df["Body"].fillna("")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 21:03:09