当我按以下方式修改 pandas 数据框时会发生什么

2023-11-29

试图理解这种行为(为什么会发生;如果是故意的,那么这样做的动机是什么)

所以我创建了一个数据框

np.random.seed(0)
df = pd.DataFrame(np.random.random((4,2)))


          0         1
0  0.548814  0.715189
1  0.602763  0.544883
2  0.423655  0.645894
3  0.437587  0.891773

我可以像这样引用列

df.columns = ['a','b']
df.a
          0
0  0.548814
1  0.602763
2  0.423655
3  0.437587 

我什至可以制作一个我认为是新的专栏

 df.third = pd.DataFrame(np.random.random((4,1)))

but df还是

df
          0         1
0  0.548814  0.715189
1  0.602763  0.544883
2  0.423655  0.645894
3  0.437587  0.891773

然而,df.third也存在(但我在 Spyder 的变量查看器中看不到它)

df.third
          0
0  0.118274
1  0.639921
2  0.143353
3  0.944669

如果我想添加第三列,我必须执行以下操作

df['third'] = pd.DataFrame(np.random.random((4,1)))

          a         b     third
0  0.548814  0.715189  0.568045
1  0.602763  0.544883  0.925597
2  0.423655  0.645894  0.071036
3  0.437587  0.891773  0.087129

所以,我的问题是,当我执行 df.third 与 df['third'] 时会发生什么?


因为它添加了third作为属性,您应该停止将列作为属性访问并始终使用df['third']以避免模棱两可的行为。

您应该养成始终使用以下方式访问和分配列的习惯df[col_name],这是为了避免像这样的问题

df.mean = some_calc()

那么这里的问题是mean是 DataFrame 的方法

因此,您已经用一些计算值覆盖了一个方法。

这里的问题是,这是为了方便而设计的一部分,用于数据分析的 pandas 书籍和一些早期的在线视频演示表明这是分配给新列的一种方式,但微妙的错误可能如此普遍,以至于它确实应该IMO 被禁止和删除

说真的,我怎么强调都不为过,停止将列作为属性引用,这是我的一个严重的问题,不幸的是我仍然看到很多发布的答案显示了这种用法

可以看到没有添加新列:

In [97]:
df.third = pd.DataFrame(np.random.random((4,1)))
df.columns

Out[97]:
Index(['a', 'b'], dtype='object')

你可以看到third被添加为属性:

In [98]:
df.__dict__

Out[98]:
{'_data': BlockManager
 Items: Index(['a', 'b'], dtype='object')
 Axis 1: Int64Index([0, 1, 2, 3], dtype='int64')
 FloatBlock: slice(0, 2, 1), 2 x 4, dtype: float64,
 '_iloc': <pandas.core.indexing._iLocIndexer at 0x7e73b00>,
 '_item_cache': {},
 'is_copy': None,
 'third':           0
 0  0.844821
 1  0.286501
 2  0.459170
 3  0.243452}

你可以看到你有一个Items, __data, Axis 1等等,但你也有'third'这是一个属性

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当我按以下方式修改 pandas 数据框时会发生什么 的相关文章

随机推荐

  • Django 不会为新的应用程序模型创建新的 sqlite 表

    我对 Django 很陌生 我遇到了新模型 以及我制作的新应用程序 博客 的问题 配置模型和 makemigration 后 表 blog post 不存在 这是我所做的所有过程 我正在遵循官方教程 这是我的博客 models py fro
  • JQuery - 删除具有特定类的类子元素[关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 如果我有这个 html div class parent div class child div div class blackSheep div div class child di
  • Delphi中将字符串分割成固定长度部分的快速方法

    我需要将一个字符串拆分为具有固定长度子字符串的 TStringList 目前我使用 procedure StrToStringList ASource string AList TStrings AFixedLen Integer begi
  • Python隐藏控制台窗口

    我创建了一个小的 Python 应用程序 我希望它在进程中间隐藏控制台窗口 因此将其重命名为 pyw 并不能解决问题 最好有某种功能来最小化窗口 有什么想法吗 在 Windows 上您可以使用win32api from win32 impo
  • SWIFT 如何创建 NSCoding 子类并从另一个类调用它?

    我在 NSCoding 上发现了这段黑色代码 它几乎确实想要我想要的 我找到它的地方的链接如下 如何在其他类中创建 NSCoding 类和用户 下面的代码不起作用 我希望有人能帮助我解决这个问题 import Foundation impo
  • 使用 R 抓取“aspx”页面

    有人可以帮助我或给我一些建议如何从此网址中抓取表格 https www promet si portal sl stevci prometa aspx 我尝试使用说明和包rvest httr 和 html但对于这个特定的网站没有任何成功 谢
  • 第二次调用表单时未处理表单加载事件

    为什么以下不起作用 两种形式 第一个调用第二个 第二个表单上有一个 DataGridView 它没有列 它们是由程序添加的 以及一个 DataGridViewButtonColumn 第一次调用 Form2 效果很好 但第二次调用它时 按钮
  • TextView 中有超链接文本

    我想在我的页面中添加一些文本作为超链接TextView就像下图一样 另外 与上图类似 我希望通过超链接打开相应的设置窗口 这怎么可能 编辑 为了让我的问题更具体 我想在单击这些文本时打开蜂窝设置 所以 我不知道在 String 对象中使用
  • S3 VPC 终端节点存储桶策略

    我有多个源自单个 VPC 的 EC2 实例 我想为我的 s3 分配一个存储桶策略 以确保仅允许该 VPC 流量访问该存储桶 因此我为该 VPC 创建了一个端点 并添加了所有路由表中的策略和路由 我向我的存储桶分配了以下策略 Version
  • 如何使用 Visual Basic 2010 Express Edition 编译 x64

    我发现了一个关于 Visual C 的论坛帖子 Visual C 2008 Express 版和 64 位目标 但是我如何在下面开发x64应用程序Visual Basic 2010 精简版 我没有安装 Visual Basic 2010 E
  • 动态更改 AWS CodePipeline 上的分支

    我正在寻找一个关于如何在 CodePipeline 中运行参数化 自定义 构建的良好解决方案 其中分支可以动态更改 关于这个问题的一些背景知识 我需要一个将在某个分支上启动的按需环境 我们已经使用 Bamboo CI 服务器作为基础设施的一
  • 使用 glBufferData 后可以删除浮点数组吗?

    我正在研究OpenGL API 我想问你是否可以在将浮点数组传递给OpenGL后删除它 示例代码 GLuint VBO float vertices new float 2 vertices 0 0 0f vertices 1 1 0f g
  • 使用浏览器后,Angular $location 不会更新

    有人遇到过这种行为吗 对此没有太多提及 其他帖子性质不同 这似乎与有关浏览器行为的文档不一致 当用户访问时 将 URL 与浏览器同步 更改地址栏 单击后退或前进按钮 或单击历史记录链接 单击链接 https docs angularjs o
  • 由于构建包错误,Heroku 未推送 Django 应用程序

    我正在尝试使用 Python 将 Django 项目上传到 Heroku 我的应用程序是基于 Python 3 6 1 构建的 当我将应用程序推送到 heroku 时 我在终端中收到以下错误消息 remote Compressing sou
  • 无法在 Windows 上设置 Anaconda:路径问题

    我一直在尝试在 Windows 8 1 上设置 Anaconda 1 8 但始终无法让 Windows 检测到它 我尝试通过编辑环境变量并添加将其添加到系统路径中C Anaconda 我尝试过 Cygwin 路线并尝试编辑 bashrc a
  • Typescript:为什么数组包含在数组联合类型上不起作用?

    我有以下类型 type Test roles nonProfit nonProfitPrivateDetails NonProfitPrivateDetails roles artist artistPrivateDetails Artis
  • 通过 JS 获取 style.display 属性仅在设置内联时才有效?

    我正在尝试获取页面上 div 的 DISPLAY 属性 我似乎只能抓住它 如果它是通过内联样式属性设置的 如果我的JS是这样的 alert document getElementById myDiv style display 它将使用以下
  • 在Python中设置颂歌

    如何在Python中设置以下具有相应初始条件的ode x t x t y t e t y t x t y t 2e t with x 0 1 and y 0 1 and 0 lt t lt 4 以下是我到目前为止所拥有的 def f u t
  • 无法抓取数据

    我刚刚开始使用 Google Apps 脚本 由于最佳编码实践建议使用尽可能少的工作表公式 因此我尝试使用 GAS Parser 进行网页抓取 然后将数据推送到我的电子表格中 在我的工作表中 使用以下公式返回一个数据表 这正是我从 GAS
  • 当我按以下方式修改 pandas 数据框时会发生什么

    试图理解这种行为 为什么会发生 如果是故意的 那么这样做的动机是什么 所以我创建了一个数据框 np random seed 0 df pd DataFrame np random random 4 2 0 1 0 0 548814 0 71