在循环中动态添加方法时的范围问题

2024-05-27

我有一个 API 用于分析我的锻炼数据(我抓取的数据)跑卫 http://runkeeper.com/的网站)。

我的主类是一个子类pandas.DataFrame,它基本上是表格数据的容器。它支持按列名索引,返回列值的数组。

我想根据数据中存在的“健身活动”类型添加一些便利属性。例如,我想添加一个属性“正在运行”:

@property
def running(self):
    return self[self['type'] == 'running']

这将返回的所有行DataFrame其中“类型”列中有“正在运行”。

我尝试对数据中存在的所有类型动态执行此操作。这是我天真的所做的:

class Activities(pandas.DataFrame):
    def __init__(self,data):
        pandas.DataFrame.__init__(self,data)
        # The set of unique types in the 'type' column:
        types = set(self['type'])
        for type in types:
            method = property(lambda self: self[self['type'] == type])
            setattr(self.__class__,type,method)

结果是所有这些属性最终都返回相同类型活动(“步行”)的数据表。

发生的情况是,当访问属性时,将调用 lambda,并在定义它们的范围中查找名称“type”。他们发现它绑定到字符串“walking”,因为那是 for 循环的最后一次迭代。 for 循环的每次迭代都没有自己的命名空间,因此所有 lambda 只能看到最后一次迭代,而不是实际定义时“type”所具有的值。

任何人都可以解决这个问题吗?我能想到两个,但它们似乎不是特别理想:

  1. define __getattr__检查该属性是否为活动类型并返回适当的行。

  2. 使用递归函数调用而不是 for 循环,以便每一级递归都有自己的命名空间。

这两个对于我的口味来说都有点太聪明了,而且pandas.DataFrame已经有一个__getattr__如果我也做了一个,我就必须谨慎地与之互动。递归可以工作,但感觉非常错误,因为类型集没有任何内在的树状结构。它是扁平的,并且在代码中看起来应该是扁平的!


修改lambda将值拉入新范围。

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

在循环中动态添加方法时的范围问题 的相关文章

随机推荐

  • 要实现 XML 可序列化,从 ICollection 继承的类型必须具有 Add 的实现

    我有来自现有项目的 CSLA 1 x 框架 对象 我试图在新的 Net 4 0 项目中使用它 这些对象正在生产中使用 如果没有 2 组对象 我确实无法将它们转换为 2 x 或 EF 在我的 c webservice 中 当我尝试运行它时 我
  • 从命令行发布 Azure 项目

    我有一个 Azure Web 角色项目 我可以使用 Visual Studio 的内置向导成功发布它 但我们希望自动化该过程 如何使用 MSbuild 或任何其他命令行工具发布 Azure WebRole 您可能还想创建一个控制台应用程序
  • 在 Excel 中的文件夹内的所有文件上添加一列

    我在一个文件夹内有 250 个不同的 excel 文件 具有相同的布局 其中包含列A to F 我需要在列上添加新列G 传统的方法是打开每个文件并在以下位置添加新列G 有没有使用 Excel 宏或任何其他工具的简单过程来完成此任务 这个链接
  • 使用运算符 j 操作 zsh 数组

    以下代码摘自here http eseth org 2010 git in zsh html function vi git st local ahead behind remote local a gitstatus Are we on
  • 将二维整数作为 Readonly/const 存储在单独的类中,同时保持非公开

    这是我在使用这个地方作为我的 去处 以获取关于什么有效 无效 为什么等的一般意见之后的第一个问题 那么让我们试试这个 由于我的经验有限 我一直在尝试寻找更好的方法来创建固定数据字段 我可以在整个程序中引用这些字段 例如我反复显示的最终用户可
  • cvs rtag:[07:34:59]等待cvsuser的锁定

    当我执行 rtag 时 进程相当慢 并显示消息 cvs rtag 07 34 59 waiting for cvsuser s lock in 是什么原因导致这个问题以及如何解决这个问题 提前致谢 通过 Google 搜索 cvs wait
  • IOS - 如何创建具有模糊背景的 Facebook 反应栏?

    虽然这周可能不会复制 Facebook 的某些设计 但我希望能够设计我自己的下面的反应指示器视图版本 我有三个UIImageViews 排列在与上面相同的位置 问题是 与 Facebook 不同 背景颜色可能会改变 即位于UIBlurEff
  • 是否可以从同一网络上的另一台计算机访问 Azure 模拟器?

    我正在运行带有 VS 2010 SP1 和 Windows Azure SDK 1 5 的 Windows 7 x64 我希望能够在连接到同一网络的 iPhone 上调试 Web 应用程序 以缩短调试周期 IIS 正在这台计算机上运行 并且
  • mysql - 有什么方法可以帮助使用另一个索引进行全文搜索?

    假设我有一个 文章 表 其中包含以下列 article text fulltext indexed author id indexed 现在我想搜索特定作者撰写的文章中出现的术语 所以像这样 select from articles whe
  • 高度在 IOS (iphone) 上无法正常工作

    我已经创建了this https codepen io salman15 project live DWbWpo Codepen 上的网站 在尝试使其响应所有平台时 我遇到了问题 看起来单个 div 覆盖了整个页面 仅在 IOS 上 并且并
  • 大厅 CI 和内部版本号

    我将从 Jenkins 转向使用 using广场CI运行我的 Sauce 实验室 e2e 测试 Sauce 实验室将具有相同内部版本号字符串的测试分组在一起 name Chrome XS browserName chrome tunnelI
  • Android 模拟器问题

    当我启动模拟器时 我遇到很多问题 错误 HttpConnectionApp emulator 5554 disconnected Cancelling net paxcel http HttpConnectionApp activity l
  • 隐藏树视图列表中的节点。在 C# 中

    我正在使用 VS 2005 C 正在处理一个未完成的 WinForm 我已将 XML 解析为树视图列表 但遇到了一些问题 我想知道是否有一种方法可以隐藏 过滤 删除名称中包含 this text 的某个节点 而不必依赖文本框 这就是我对这个
  • 如何在单元测试中的请求之间更改 $httpBackend when[method] 语句?

    在我的测试中 我启动一些模型数据并模拟响应 beforeEach function var re new RegExp http users online httpBackend whenGET re respond id 12345 us
  • 如何使用 php 通过 https 下载文件

    我需要使用 PHP 下载 xml 文件 我可以在对文件进行curl 调用时通过设置以下选项来读取文件的内容 curl setopt http CURLOPT SSL VERIFYPEER false curl setopt http CUR
  • 方法与管道

    在 Angular 应用程序中的模板插值中使用管道和方法有区别吗 例如 h1 name toLowerCase h1 vs h1 name lowercase h1 就性能而言 是有真正的收获还是只是个人喜好 我知道调用模板中的方法通常会降
  • 选中复选框时,角度反应形式禁用输入

    我有一个复选框和输入 我想要做的是在选中复选框时禁用输入 并在取消选中复选框时启用输入 这是我的表格组 this workingTime this fb group toggle false this is the checkbox fro
  • 根据值更改 DataGrid 单元格颜色

    我有一个 WPF 数据网格 我想要根据值使用不同的单元格颜色 我的 xaml 上有以下代码 Style TargetType DataGridCell 但不是只选择一个单元格而是选择所有行 我缺少什么 如果您尝试设置DataGrid Cel
  • 在包含缺失值的 Pandas 数据框列上使用 apply 和 lambda 函数

    这是这个问题的后续 如何根据 pandas 数据框中其他列中的子字符串创建新列 https stackoverflow com questions 70086559 how to create new column based on sub
  • 在循环中动态添加方法时的范围问题

    我有一个 API 用于分析我的锻炼数据 我抓取的数据 跑卫 http runkeeper com 的网站 我的主类是一个子类pandas DataFrame 它基本上是表格数据的容器 它支持按列名索引 返回列值的数组 我想根据数据中存在的