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

关于TensorFlow基础鸢尾花示例中DataFrame赋值后pop操作的疑问

关于Pandas DataFrame赋值后pop操作的影响问题

嘿,这个问题抓得很准,刚好涉及到Pandas中对象引用的核心知识点!我来给你拆解清楚:

当你执行 train_features = train 这条语句时,并没有创建一个新的DataFrame对象,而是让train_features和train指向了内存中同一个DataFrame实例——这就是Python里的「引用赋值」。

所以当你接着对train_features执行 pop(label_name) 操作时,本质上是直接对这个共享的DataFrame进行修改:移除指定列并返回它。这时候不管你查看train_features还是原来的train,都会发现label_name对应的列已经被移除了。

给你看个直观的代码示例验证一下:

import pandas as pd

# 模拟鸢尾花数据集的结构
train = pd.DataFrame({
    'sepal_length': [5.1, 4.9, 4.7],
    'sepal_width': [3.5, 3.0, 3.2],
    'petal_length': [1.4, 1.4, 1.3],
    'label': ['setosa', 'setosa', 'setosa']
})
label_name = 'label'

# 直接赋值(引用传递)
train_features = train
train_labels = train_features.pop(label_name)

# 查看结果
print("train_features的列:", train_features.columns.tolist())
# 输出:train_features的列: ['sepal_length', 'sepal_width', 'petal_length']
print("原train的列:", train.columns.tolist())
# 输出:原train的列: ['sepal_length', 'sepal_width', 'petal_length']

如果你的需求是保留原train的完整数据,只让train_features移除标签列,那你需要创建DataFrame的副本:

# 深拷贝创建新对象
train_features = train.copy()
train_labels = train_features.pop(label_name)

# 此时原train的列不会被修改
print("原train的列:", train.columns.tolist())
# 输出:原train的列: ['sepal_length', 'sepal_width', 'petal_length', 'label']

这样就能精准控制操作的影响范围啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:29:59