【问题标题】:what is the difference between target = train['claim'] and target = train['claim'].copy()?target = train['claim'] 和 target = train['claim'].copy() 有什么区别?
【发布时间】:2021-11-01 22:03:45
【问题描述】:

考虑到train 是一个 Pandas 数据框, 这两者有什么区别?

  • target = train['claim']‍
  • target = ‍train['claim'].copy()‍

由于这两个代码sn-ps都用于将列的值分配给目标变量,它们有何不同?

【问题讨论】:

  • 请在写问题时发布工作示例。我们不应该为您创建测试数据集。
  • 嗨,您能提供更多上下文吗?你在用熊猫吗?

标签: python pandas dataframe machine-learning


【解决方案1】:

target = train['claim'] 表示目标将指向存储在train['claim'] 中的完全相同的对象。通过targettrain['claim'] 对此对象进行的任何修改都会影响两者。

target = train['claim'].copy() 表示您正在创建train['claim'] 中任何内容的副本并将其存储到target。对traint['claim'] 中对象的后续修改不会影响target,反之亦然。

【讨论】:

    【解决方案2】:

    如果不看上下文就很难说,但我假设train["claim"] 是一个列表。 .copy() 方法创建一个列表的副本,这意味着当您更改名为“target”的变量时,您不会同时更改train["claim"] 的值。它通常会更改值的原因是因为列表是可变的,这意味着它们可以在创建后更改。大多数变量,例如整数、字符串和元组都是不可变的。当您更改它们时,您实际上是在创建一个与旧变量同名的新变量,但由于列表不是这种情况,因此当您更改列表时这两个变量都会被编辑。 .copy() 方法阻止了这种情况的发生。例如,运行以下代码:

    a = ["a", "b"]
    print(id(a))
    b = a
    print(id(b))
    c = ["c", "d"]
    print(id(c))
    d = c.copy()
    print(id(d))
    

    在第一种情况下,ab 存储在内存中的同一位置(具有相同的 id),因此更改一个会影响另一个。但是在第二种情况下,内存的不同位置存储了两个不同的列表

    【讨论】:

    • 这是一个数据框
    • 仍然是同一个概念,因为它们是可变的。
    猜你喜欢
    • 2016-06-12
    • 2020-02-14
    • 1970-01-01
    • 2011-10-28
    • 2012-05-26
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 2012-02-08
    相关资源
    最近更新 更多