首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么当pandas的DataFrame值有变化时,任何变量的值也会改变?

当pandas的DataFrame值有变化时,任何变量的值也会改变的原因是因为pandas中的DataFrame对象是通过引用传递的。

在Python中,变量是对对象的引用,而不是对象本身。当我们将一个DataFrame对象赋值给一个变量时,实际上是将该变量指向了该DataFrame对象所在的内存地址。因此,当我们修改DataFrame对象的值时,所有引用该对象的变量都会反映这些修改。

这种引用传递的机制在pandas中的DataFrame对象上也同样适用。当我们对DataFrame进行操作时,例如修改某一列的值或者进行筛选、排序等操作,实际上是在原始的DataFrame对象上进行的,而不是创建一个新的DataFrame对象。因此,所有引用该DataFrame对象的变量都会看到这些修改。

为了避免这种情况,可以使用DataFrame的copy()方法创建一个新的DataFrame对象,从而避免原始DataFrame对象的修改影响到其他变量。例如:

代码语言:txt
复制
import pandas as pd

# 创建一个DataFrame对象
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})

# 创建一个新的DataFrame对象,将原始DataFrame对象的值复制过来
df_copy = df.copy()

# 修改原始DataFrame对象的值
df['A'][0] = 100

# 打印两个DataFrame对象的值
print(df)
print(df_copy)

输出结果为:

代码语言:txt
复制
     A  B
0  100  4
1    2  5
2    3  6

   A  B
0  1  4
1  2  5
2  3  6

可以看到,修改原始DataFrame对象的值并不会影响到复制的DataFrame对象。

总结起来,当pandas的DataFrame值有变化时,任何变量的值也会改变是因为DataFrame对象是通过引用传递的。为了避免这种情况,可以使用DataFrame的copy()方法创建一个新的DataFrame对象。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

统计师Python日记【第5天:Pandas,露两手】

上一集开始学习了Pandas数据结构(Series和DataFrame),以及DataFrame一些基本操作:改变索引名、增加一列、删除一列、排序。 今天我将继续学习Pandas。...这点特别注意,因为这可能导致你数据不必苛,比如某一年少一个季度,那么这一年其实就是三个季度加总,跟其他年份四个季度怎么比?...可以单独只计算两列系数,比如计算S1与S3相关系数: ? 二、缺失处理 Pandas和Numpy采用NaN来表示缺失数据, ? 1....使用 columns= 自定义变量名: ? 索引名字可以变量一样命名,分别命名country和year两个索引名: ?...发现了一个问题——第一行被当做变量名了!所以要指定 header=None: ? 变量名变成了0、1,还是扭啊,我们来指定个变量吧: ? 用 names= 可以指定变量名。

3K70

快速解释如何使用pandasinplace参数

介绍 在操作dataframe时,初学者有时甚至是更高级数据科学家会对如何在pandas中使用inplace参数感到困惑。 更有趣是,我看到解释这个概念文章或教程并不多。...这是因为inplace=True函数不返回任何内容。它用所需操作修改现有的dataframe,并在原始dataframe上“就地”(inplace)执行。...如果在dataframe上运行head()函数,应该会看到两行被删除。 df_1.head() 现在我们用inplace = False运行相同代码。...inplace = False函数将返回包含删除行数据。 记住,inplace被设置为True时,不会返回任何东西,但是原始数据被修改了。 那么这一次原始数据会发生什么呢?...它直接改变原始数据框架,因此,如果需要改变原始数据,那么inplace=True是首选。 那么,为什么会有在使用inplace=True产生错误呢?

2.4K20
  • 数据分析之Pandas变形操作总结

    透视表 1. pivot 一般状态下,数据在DataFrame以压缩(stacked)状态存放,例如上面的Gender,两个类别被叠在一列中,pivot函数可将某一列作为新cols: df.pivot...其他变形方法 1. melt melt函数可以认为是pivot函数逆操作,将unstacked状态数据,压缩成stacked,使“宽”DataFrame“窄” df_m = df[['ID',...这个参数是用来删除缺失,这个例子不是很好,展示不出删除缺失,但是可以看下面分享链接,一个例子比较明显展示了dropna是怎么删除缺失。...第二个参数fill_value很容易猜到,前面stackdropna是删除缺失,这里fill_value就是将出现缺失补充成NaN,默认为None。...在这些函数中有专门参数来代表我们要换那一行列索引位置level,从而实现选择索引。 问题3:请举出一个除了上文提过关于哑变量方法例子。 下面我们改变df_d中元素。

    4K21

    Python数据分析之数据预处理(数据清洗、数据合并、数据重塑、数据转换)学习笔记

    ,默认None.  1.2 重复处理  ​ 数据中出现了重复,在大多数情况下需要进行删除。 ...to_replace:表示查找被替换方式 ​ value:用来替换任何匹配 to_replace,默认None.  1.4 更改数据类型  ​ 在处理数据时,可能遇到数据类型不一致问题。...sort:根据连接键对合并数据进行排序,默认为 False.  2.4 合并重叠数据  ​ DataFrame对象中出现了缺失数据,而我们希望使用其他 DataFrame对象中数据填充缺失数据,则可以通过...注意:使用combine_first()方法合并两个DataFrame对象时,必须确保它们行索引和列索引重叠部分  3....哑变量又称应拟变量,名义变量,从名称上看就知道,它是人为虚设变量,用来反映某个交量不间类别 ​ 使用哑最处理类别转换,事实上就是将分类变量转换为哑最矩阵或指标矩阵,矩阵通常用“0”或“1”表示

    5.4K00

    这些pandas技巧你还不会吗 | Pandas实用手册(PART II)

    Pandas实用手册(PART I)中,介绍了建立DataFrame以及定制化DataFrame显示设定两大类技巧。发现已经同学留言催更了?‍?...针对字符串类型特征,你可以将空设定成任何容易识别的,让自己及他人明确了解此DataFrame 数据: ? 舍弃不需要行列 给定一个初始DataFrame, ?...将函数inplace参数设为Truepandas直接修改df,一般来说pandas函数并不会修改原始DataFrame,这样可以保证原始数据不会受到任何函数影响。...上面注解相同效果,但存在多个判断式时,个准确说明making意义变量(上例male_and_age_over_70)让你程序代码好懂一点。...这边刚好所有样本Cabin栏位皆为空,但倒数第2个样本就算其Cabin栏不为空因为Age栏为空而被选出。

    1.1K20

    Pandas图鉴(三):DataFrames

    这里需要注意,从二维NumPy数组中构建数据框架是一个默认视图。这意味着改变原始数组中改变DataFrame,反之亦然。此外,它还可以节省内存。...这就是为什么merge和join一个排序参数。...默认情况下,Pandas会对任何可远程求和东西进行求和,所以必须缩小你选择范围,如下图: 注意,对单列求和时,会得到一个Series而不是一个DataFrame。...Pivoting 和 "unpivoting" 假设你一个取决于两个参数i和j变量a,两种等价方式来表示它是一个表格: 数据是 "dense" 时候,"dense"格式更合适(很少零或缺失元素时...两个以上参数时,情况变得更加复杂。 自然,应该有一个简单方法来在这些格式之间进行转换。而Pandas为它提供了一个简单方便解决方案:透视表。

    40020

    Scikit-Learn教程:棒球分析 (一)

    对于那些可能不熟悉棒球的人来说,这里一个关于游戏如何运作简要说明,其中包括一些变量。...如上所述,空影响数据质量,进而可能导致机器学习算法出现问题。 这就是为什么删除下一个。几种方法可以消除空,但最好先显示每列计数,以便决定如何最好地处理它们。...我认为你最好保留行并使用该fillna()方法用每个列中值填充空。偷窃(CS)和俯仰(HBP)击中不是非常重要变量。在这些列中有如此多,最好一起消除列。...在进入任何机器学习模型之前,了解每个变量如何与目标变量相关联可能很有用。Pandas用这种corr()方法使这很容易。...这也解释了为什么您尝试使用新数据进行预测时,过度拟合模型性能非常差。 但是不要担心,许多方法可以交叉验证您模型。

    3.4K20

    只需七步就能掌握Python数据准备

    • 将数据集中类似观察聚类分组,通过将数据折叠成几个小数据点,可以更容易地识别行为模式。 要更全面地了解为什么EDA很重要,请阅读Chloe文章。...• 使用缺少数据,Pandas文档 • pandas.DataFrame.fillna,Pandas文档 很多方法可以在Pandas DataFrame中完成填充缺失,并将其替换为所需内容。...为什么我们遇到不平衡数据,以及为什么我们可以在某些领域比其他领域更频繁地处理不平衡数据一个很好解释是:   在那些领域中使用数据通常少于1%,但也有例外(比如使用信用卡欺诈者,用户点击广告或损坏服务器扫描其网络...你可以看看下面的一些初步想法: • 将Pandas DataFrame转换为数组,并评估多线性回归模型, Stack Overflow 非常简单数据准备过程 了干净数据,你还想在Python中进行机器学习...以下是有关Pandas DataFrame存储一些信息: • 将Pandas DataFrame写入MySQL,Stack Overflow • Quick HDF5 with Pandas Giuseppe

    1.6K71

    竟然说pandasjoin比merge快5倍?我带你看源码吧

    足以复现原文效果 看看结果: 嗯?还真快了这么多! 但是为什么我一开始听到这说法,不用做任何实验,就觉得这观点问题? 其实道理很简单。...,代码跳回去,就连当时执行中所有变量都可以查看 简单列一下大概调用图: join 函数绕了一圈才到真正执行地方 所以现在我们知道,join 函数其实比 merge 函数执行更多代码。...---- pandas 优化 此时,我们把实验代码中执行 merge 和 join 先后顺序调换一下: 注意,记录时间变量对应关系没有,所以这不会影响结果表格左右顺序 看看结果: 现在,...为什么?显然,什么东西在第二次运行时候,得到了优化。 在之前源码调试中,我们得知,其实两个表按行索引关联,最核心计算就是行索引对象 join 函数。...按这个原理以及之前调试方式,可以找到一个属性。具体过程我就不再啰嗦了,直接给出验证结果: 在 join 过程中,一个判断逻辑,如果行索引都是唯一,那么进行一些操作。

    1.1K30

    Pandas图鉴(二):Series 和 Index

    对于非数字标签来说,这有点显而易见:为什么(以及如何)Pandas在删除一行后,重新标记所有后续行?对于数字标签,答案就有点复杂了。...在Pandas中,它被称为MultiIndex(第4部分),索引内每一列都被称为level。 索引另一个重要特性是它是不可改变。与DataFrame普通列相比,你不能就地修改它。...索引中任何变化都涉及到从旧索引中获取数据,改变它,并将新数据作为一个新索引重新连接起来。...比较混合类型DataFrame时,NumPy就会出问题(问题#19205[5]),而Pandas做得非常好。...字符串和正则表达式 几乎所有的Python字符串方法在Pandas中都有一个矢量版本: count, upper, replace 这样操作返回多个时,几个选项来决定如何使用它们: split

    28420

    基于Python数据分析之pandas统计分析

    pandas模块为我们提供了非常多描述性统计分析指标函数,如总和、均值、最小、最大等,我们来具体看看这些函数: 1、随机生成三组数据 import numpy as np import pandas...常用三大类方法,即删除法、填补法和插法。 删除法 数据中某个变量大部分值都是缺失,可以考虑删除改变量缺失是随机分布,且缺失数量并不是很多是,可以删除这些缺失观测。...替补法 对于连续型变量,如果变量分布近似或就是正态分布的话,可以用均值替代那些缺失;如果变量,可以使用中位数来代替那些缺失;对于离散型变量,我们一般用众数去替换那些存在缺失观测。...默认情况下,dropna删除任何含有缺失行 删除所有行为缺失数据 import numpy as np import pandas as pd df = pd.DataFrame([[1,2,3...df.dropna() #该操作删除所有有缺失行数据 ? df.dropna(how=’all’) #该操作仅删除所有列均为缺失行数据 ?

    3.3K20

    Stata与Python等效操作与调用

    常规数据整理包括变量增、删和改、重命名和排序等操作。处理过程中,针对数值型和字符型不同数据类型,不同处理方法。 数值型变量主要是简单计算,生成新变量。...Pandas 根据要合并变量是否唯一来自动确定。...在 Python 和 Pandas 中,DataFrame 索引可以是任何(尽管您也可以通过行号引用行;参见 .loc 与 iloc )。...要在 DataFrame 列中查找缺失,使用以下任何一种: df[].isnull() 返回一个每行为 True 和 False 向量 df[]。...另一个重要区别是 np.nan 是浮点数据类型,因此 DataFrame 任何列包含缺失数字将是浮点型。如果一列整型数据改变了,即使只有一行 np.nan ,整列将被转换为浮点型。

    9.9K51

    python:Pandas里千万不能做5件事

    大部分时候,你必须只用索引找到一个,或者只用找到索引。 然而,在很多情况下,你仍然会有很多不同数据选择方式供你支配:索引、、标签等。 在这些不同方法中,我当然更喜欢使用当中最快那种方式。...例如,如果你一列全是文本数据,Pandas 读取每一个,看到它们都是字符串,并将该列数据类型设置为 "string"。然后它对你所有其他列重复这个过程。...对于不是来自 CSV DataFrames 同样适用。 错误4:将DataFrames遗留到内存中 DataFrames 最好特性之一就是它们很容易创建和改变。...与之相反是,这里一些简单方法来保持你内存不超负荷: 使用 df.info() 查看 DataFrame 使用了多少内存。 在 Jupyter 中安装插件支持。...你可以在这些 DataFrame 绘图对象上做任何你可以对其他 Matplotlib 绘图对象做事情。

    1.6K20

    盘一盘 Python 系列特别篇 - 面向对象编程

    当然你需要大概知道整型变量、列表变量、numpy 数组变量pandas 数据帧变量。 回想一下,原来你是不是称它们都是变量?但其实上它们更「高级」叫法:类或对象。...原因是 emp_1 找不到类变量字段,就会继续向其对应类里找。 如果通过类访问来改变变量 raise_rate ,那么类和对象下 raise_rate 都会。...raise_rate ,那么只会是对象 emp_1下 raise_rate ,而类下和对象 emp_2 raise_rate 不会。...总结:如果想让类变量千人千面,用 self.类变量 2.4 类变量 (千人一面) 类变量 - 薪水增幅 - 对于不同对象不同,有没有一种类变量,对于所有对象都有相同?...但经理可以管理开发者,因此它构造函数 __init__ 一个参数是 employee,初始为 None。为什么不用空列表 [] 当初始呢?原因就是列表是可变 (mutable)。

    88920

    30 个小例子帮你快速掌握Pandas

    选择特定列 3.读取DataFrame一部分行 read_csv函数允许按行读取DataFrame一部分。两种选择。第一个是读取前n行。...8.删除缺失 处理缺失另一种方法是删除它们。“已退出”列中仍缺少。以下代码将删除缺少任何行。...例如,thresh = 5表示一行必须具有至少5个不可丢失非丢失。缺失小于或等于4行将被删除。 DataFrame现在没有任何缺失。...这些显示以字节为单位使用了多少内存。 23.分类数据类型 默认情况下,分类数据与对象数据类型一起存储。但是,这可能导致不必要内存使用,尤其是分类变量基数较低时。...26.减少浮点数小数点位数 Pandas浮点数可能显示过多小数点。我们可以使用舍入函数轻松调整它。 df_new.round(1)#所需小数位数 ?

    10.7K10

    如何快速学会Python处理数据?(5000字走心总结)

    常用Python数据处理模块Pandas和Numpy这两个,这是必须要掌握,另外,Matplotlib模块是数据可视化模块,也是必须。...03 声明变量 变量是Python语言中一个非常重要概念,其作用就是为Python程序中某个起一个名字。类似于"张三"、"李四"一样名字。...在Python语言中,声明变量同时需要为其赋值,毕竟不代表任何变量毫无意义。...a="" #声明一个空字符类型 data_new =pd.Dataframe() #声明一个空数据集格式 声明变量非常简单,语法结构:等号(=)左侧是变量名,右侧是变量值,Python编译器自动识别变量数据类型...两种工具都能达到使用者业务场景想要效果时,使用者更倾向于使用自己熟练或者更易于实现工具高效地解决实际问题。

    1.9K20

    pandas入门教程

    建议读者先对NumPy一定熟悉再来学习pandas,我之前写过一个NumPy基础教程,参见这里:Python 机器学习库 NumPy 教程 核心数据结构 pandas最核心就是Series和DataFrame...请注意: Index并非集合,因此其中可以包含重复数据 Index对象是不可以改变,因此可以通过它安全访问数据 DataFrame提供了下面两个操作符来访问其中数据: loc:通过行和列索引来访问数据...忽略无效 我们可以通过pandas.DataFrame.dropna函数抛弃无效: ? 注:dropna默认不会改变原先数据结构,而是返回了一个新数据结构。...如果想要直接更改数据本身,可以在调用这个函数时候传递参数 inplace = True。 对于原先结构,无效全部被抛弃之后,将不再是一个有效DataFrame,因此这行代码输出如下: ?...Seriesstr字段包含了一系列函数用来处理字符串。并且,这些函数自动处理无效。 下面是一些实例,在第一组数据中,我们故意设置了一些包含空格字符串: ?

    2.2K20

    Python进阶之Pandas入门(四) 数据清理

    如何处理缺失 在研究数据时,您很可能遇到缺失或null,它们实际上是不存在占位符。最常见是PythonNone或NumPynp.nan,在某些情况下它们处理方式是不同。...处理空两种选择: 去掉带有空行或列 用非空替换空,这种技术称为imputation 让我们计算数据集每一列总数。...删除空非常简单: movies_df.dropna() 这个操作将删除至少有一个空任何行,但是它将返回一个新DataFrame,而不改变原来数据。...可能会有这样情况,删除每一行从数据集中删除太大数据块,所以我们可以用另一个来代替这个空,通常是该列平均值或中值。 让我们看看在revenue_millions列中输入缺失。...首先,我们将该列提取到它自己变量: revenue = movies_df['revenue_millions'] 这里使用方括号是我们在DataFrame中选择列一般方法。

    1.8K60
    领券