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

如何在不改动原Pandas DataFrame的前提下按条件修改值并生成新DataFrame

嘿,这问题我熟!要在不碰原Pandas DataFrame(或Series)的前提下生成修改后的新数据,关键就是先搞个完全独立的副本,再在副本上动手就行,给你一步步讲清楚:

解决方法:不修改原数据的前提下生成修改后的新DataFrame

核心思路

绝对不能直接把原变量赋值给新变量(比如df_1 = df_0),因为这只是传递引用,改df_1的时候df_0也会跟着变!必须用.copy()方法创建深拷贝,让新变量和原变量彻底独立。

示例实操(对应你的需求)

先看你给的例子:原数据是[1,2,3],要把大于2的值改成np.nan,存到新变量df_1里,原数据df_0保持不变。

步骤1:导入依赖+构造原数据

import pandas as pd
import numpy as np

# 这里用Series示例,DataFrame操作逻辑完全一致
df_0 = pd.Series([1, 2, 3])

步骤2:创建副本+修改值(两种常用方法)

方法一:先复制再用布尔索引修改

# 先创建独立副本
df_1 = df_0.copy()
# 把df_1中大于2的值替换成np.nan
df_1[df_1 > 2] = np.nan

方法二:用.where()一步到位

.where()方法会保留满足条件的元素,不满足的直接替换成指定值,而且它返回的是新对象,不用提前复制:

df_1 = df_0.where(df_0 <= 2, np.nan)

验证结果

执行完后打印看看:

print("原数据df_0:", df_0.tolist())  # 输出:原数据df_0: [1, 2, 3]
print("修改后的数据df_1:", df_1.tolist())  # 输出:修改后的数据df_1: [1, 2, nan]

拓展:多列DataFrame的情况

如果是带多列的DataFrame,操作逻辑也一样,比如要修改某一列的特定值:

# 构造多列DataFrame
df_original = pd.DataFrame({'score': [85, 92, 78, 95], 'age': [22, 25, 21, 23]})
# 创建副本
df_new = df_original.copy()
# 把score列中大于90的值改成np.nan
df_new.loc[df_new['score'] > 90, 'score'] = np.nan

这样df_original完全不受影响,df_new是修改后的新数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:47:21