gpt4 book ai didi

python - 动态构建索引以对 pandas 中的记录进行分类

转载 作者:太空宇宙 更新时间:2023-11-03 15:40:29 25 4
gpt4 key购买 nike

我正在尝试编写一个简单的记录分类器。我想添加一列,其值对记录进行分类。我想将我的分类规则编入 yaml 或类似文件以进行维护。

我正在使用 Pandas,因为这似乎是在 python 中处理 csv 记录的最佳方式。我愿意接受其他建议。我是 pandas 的新手,我的 python 技能被礼貌地描述为“为什么这看起来像 perl?”

我有一个数据框 (trans),我想按如下方式应用我的规则:

trans['class'][(trans['foo'] > 5) & (trans['bar'].str.contains(re.compile('baz|one|two', re. I))] = '记录类型 1'

这是交互式的。我希望能够生成分类索引 "(trans['foo'] > 5) & (trans['bar'].str.contains(re.compile('baz|one|two' , re.I))" 动态地从我的 yaml 文件中的每个规则。我已经成功地构建了字符串,这样我就有了这样的东西:

slice = "(trans['foo'] > 5) & (trans['bar'].str.contains(re.compile('baz|one|two', re.I))"
trans['class'][slice] = '记录类型 1'

这行不通。我应该怎么做?

最佳答案

一些注意事项:

  1. 引号表示 Python 中的字符串。不要使用它们来包围 bool 掩码的计算。
  2. 不要使用链式索引。这是explicitly discouraged在文档中,可能会导致意想不到的副作用,或者关于您是在修改 View 还是副本的歧义。您可以使用 pd.DataFrame.loc相反。
  3. pd.Series.str.contains已经支持正则表达式并默认为 regex=True,您不需要使用 re 模块。

为了便于阅读,您可以拆分和组合蒙版。这是一个例子:

m1 = trans['foo'] > 5
m2 = trans['bar'].str.contains('baz|one|two', case=False)

trans.loc[m1 & m2, 'class'] = 'Record Type 1'

通常昂贵的部分,m2 的计算,可以通过求助于专业算法来优化,参见 this answer了解详情。

关于python - 动态构建索引以对 pandas 中的记录进行分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52698072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com