我试图在冻结集中找到一个子串,但是我有点没有选择余地。
我的数据结构是pandas.dataframe(如果你熟悉的话,它来自association_rules包中的mlxtend),我想打印所有包含特定字符串的行,其中先行项(即frozenset)。
样本数据:
python - 在 Pandas FrozenSet中查找子串-LMLPHP

    print(rules[rules["antecedents"].str.contains('line', regex=False)])

但是,每当我运行它时,就会得到一个空的数据帧。
当我尝试在rules["antecedents"]系列上只运行内部函数时,我只得到所有条目的假值。但这是为什么?

最佳答案

因为dataframe.str.*函数仅用于字符串数据。因为您的数据不是字符串,所以无论它的字符串表示形式如何,它都将始终是NaN。证明:

>>> x = pd.DataFrame(np.random.randn(2, 5)).astype("object")
>>> x
         0         1         2          3          4
0 -1.17191  -1.92926 -0.831576 -0.0814279   0.099612
1 -1.55183 -0.494855   1.14398   -1.72675 -0.0390948
>>> x[0].str.contains("-1")
0   NaN
1   NaN
Name: 0, dtype: float64

你能做什么:
使用apply
>>> x[0].apply(lambda x: "-1" in str(x))
0    True
1    True
Name: 0, dtype: bool

所以你的代码应该写:
print(rules[rules["antecedents"].apply(lambda x: 'line' in str(x))])

如果您的意思是元素上的完全匹配,则可能需要使用'line' in x

关于python - 在 Pandas FrozenSet中查找子串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55402544/

10-12 16:41