如何在不改动原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
相关产品推荐
相关产品推荐

