python-动态建立索引以对熊猫中的记录进行分类

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

我正在使用Pandas,因为这似乎是使用python中的csv记录执行此操作的最佳方法.我愿意接受其他建议.我是熊猫新手,我的python技能被礼貌地描述为“为什么看起来像perl?”

我已经获得一个数据框(反式),我想按如下方式应用规则:

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′

这行不通.我应该怎么做呢?

解决方法:

需要注意的几点:

>引号表示Python中的字符串.不要使用它们来包围布尔掩码的计算.
>不要使用链接索引.在文档中为explicitly discouraged,可能会导致意外的副作用,或者在修改视图还是副本时会产生歧义.您可以改用pd.DataFrame.loc.
> 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.

上一篇:基于双向BiLstm神经网络的中文分词详解及源码


下一篇:我可以在MySQL的Performance_schema中添加索引吗