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