首页
学习
活动
专区
工具
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

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

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

4K21
  • 快速解释如何使用pandas的inplace参数

    介绍 在操作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

    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.5K00

    Pandas图鉴(三):DataFrames

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

    44420

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

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

    1.2K20

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

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

    3.5K20

    竟然说pandas中的join比merge快5倍?我带你看源码吧

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

    1.2K30

    只需七步就能掌握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.7K71

    Pandas图鉴(二):Series 和 Index

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

    33820

    Stata与Python等效操作与调用

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

    10K51

    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)。

    89920

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

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

    10.8K10

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

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

    2K20

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

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

    1.8K60

    pandas入门教程

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

    2.2K20

    如何重构你的时间序列预测问题

    你不必按照原样对你的时间序列预测问题进行建模。 有很多方法可以重新构建您的预测问题,既可以简化预测问题,也可以揭示更多或不同的信息进行建模。重构最终可以导致更好和/或更强大的预测。...单位是摄氏度,有3650个观测值。数据的来源是澳大利亚气象局。 详细了解数据市场上的数据集。...注意:下载的文件包含一些问号(“?”)字符,在使用数据集之前必须将其删除。在文本编辑器中打开文件并删除“?”字符。也删除该文件中的任何页脚信息。 下面的例子将数据集加载为Pandas系列。...改变预测问题的粒度确实改变了问题的难度,如果问题的要求允许这样的重新定义,这个问题就非常有用。 下面是一个例子,重新设置最低日温度预测问题,以预测每日温度四舍五入到最接近的5倍数的值。...预测下周最低气温最低的一天。 预测一年的最低温度值。 但我们会很容易陷入需要一步预测的想法中。 关注时间范围内的问题的折射,会迫使你思考点与多步预测,以及未来要考虑的距离。

    2.7K80
    领券