关于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
相关产品推荐
相关产品推荐

