在 Python 中创建特征的条件数值列表

Creating a Conditional Numerical List of Features in Python

我正在尝试创建一个从列列表中提取的数字索引列表,因为这些列的名称中包含特征列表中的任何字符串。

我曾尝试对条件语句使用列表理解。但是,代码给我一个类型错误 "in requires string as left operand, not bool".

import pandas as pd
feature_list = ['a', 'b']

x = pd.DataFrame({"data_a":[1,2,3], "data_b":[1,2,3], "data_c":[1,2,3]})

numerical_index_list = [x.columns.get_loc(a) for a in [b for b in list(x.columns) if any(c for c in feature_list) in b]]

谁能帮我得到一个条件列表理解,它会给我一个包含字符串 a 和 b ["data_a", "data_b"] 的列列表?

您可以将 feature_list 用作 set 并查看它是否与列名称相交。这似乎是您正在尝试的方法;虽然我认为这是错误的,因为 data 这个词里面有一个,因此都通过了那个测试。

features = set(feature_list)
cols = x.columns
[cols.get_loc(c) for c in cols if features.intersection(c)]
#[0, 1, 2]

也许使用更好的方法来确定列是否是 feature_list 的子集?像 if c[-1] in features 这样的东西?这样只有前 2 次通过而最后一次不会因为 c 不在 feature_list 中。

[cols.get_loc(c) for c in cols if c[-1] in feature_list]
#[0, 1]

与您的评论更相关只需从列名中删除"data_"并使用第一种方法。

[cols.get_loc(c) for c in cols if features.intersection('_'.join(c.split('_')[1:]))]
#[0, 1]