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

Jupyter重复执行单元格后统计值异常及原数值保留方法咨询

问题描述

假设我有一个含数百万行的大型df,需替换某列中的特殊字符ä和ö,执行如下代码:

print(df['Column'].str.contains('ä|ö', regex=True).sum())
umlaut_dict = {'ä':'ae','ö':'oe'}
df.Column.replace(umlaut_dict, regex=True, inplace=True)
print(df['Column'].str.contains('ä|ö', regex=True).sum())

首次执行正常,先显示需替换的字符数量,再确认全部替换完成;但第二次执行该单元格时,两次打印结果均为0。我的问题是:

  1. 这种情况是否需要担忧?Jupyter Notebook是否本就应仅运行一次?
  2. 能否不创建df副本的前提下保留初始统计的原数值?
解答

问题1解答

  • 完全不用担忧,这是Jupyter Notebook的正常特性。因为你用了inplace=True,第一次执行就直接修改了内存里的原df,第二次运行时,df里已经没有ä和ö了,所以两次打印都是0。Jupyter的单元格可以重复运行,但每次运行都是基于当前内存中的数据状态,不是回到脚本初始状态。如果要重复验证替换逻辑,要么重新加载原始数据,要么先把原始df备份好再操作。

问题2解答

  • 可以做到,不用创建整个df的副本,只需要提前把初始统计值存到一个变量里就行。修改代码如下:
# 先把初始统计值存下来
initial_count = df['Column'].str.contains('ä|ö', regex=True).sum()
print(initial_count)
umlaut_dict = {'ä':'ae','ö':'oe'}
df.Column.replace(umlaut_dict, regex=True, inplace=True)
# 验证替换后的数量
print(df['Column'].str.contains('ä|ö', regex=True).sum())
# 之后随时可以调用initial_count查看原数值
# print(initial_count)

这样不管你后续怎么修改df,initial_count里都保留着第一次统计的原始数值,而且没有复制整个大df,不会占用额外的大量内存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 23:31:12