Python 在pandas frozenset中查找子字符串

Python 在pandas frozenset中查找子字符串,python,pandas,substring,frozenset,Python,Pandas,Substring,Frozenset,我试图在冻结集中找到一个子串,但是我有点没有选择 我的数据结构是pandas.dataframe(它来自association\u rules,如果您熟悉它的话,它来自mlxtend包),我想打印先行项(是一个冻结集)包含特定字符串的所有行 样本数据: print(规则[rules[“antecedents”].str.contains('line',regex=False)]) 然而,每当我运行它时,我都会得到一个空的数据帧 当我尝试在我的规则系列[“antecedents”]上只运行内部

我试图在冻结集中找到一个子串,但是我有点没有选择

我的数据结构是pandas.dataframe(它来自
association\u rules
,如果您熟悉它的话,它来自
mlxtend
包),我想打印先行项(是一个冻结集)包含特定字符串的所有行

样本数据:

print(规则[rules[“antecedents”].str.contains('line',regex=False)])
然而,每当我运行它时,我都会得到一个空的数据帧


当我尝试在我的
规则系列[“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
你能做什么:

使用
应用

>>> 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))])

如果您的意思是元素上的精确匹配,您可能希望在x中使用
'line'

因为
规则[“antecedents”]不是字符串,而是冻结集,您是否尝试过
规则[rules[“antecedents”].str.contains('line',regex=False)==True]
。因此,
rules[“antecedents”].str
错误地试图获取冻结集的字符串表示,正如@adrtam所说,它只会给出NaN(可以说它会引发异常)。由于您没有提供MCVE,请您转储
规则[“先行项”]
的实际值好吗?@ElBaulP是的,我在另一篇stackoverflow帖子中找到了这个答案,很抱歉没有提及。对我来说,这似乎做了完全相同的事情@smci规则[“先行项”]
的实际类型是
pandas.core.series.series
。MCVE代表什么?我在谷歌上找不到一个可行的结果。谢谢你美化我的问题,谢谢你!今天我偶然发现了一个类似的解决方案,但看起来好像我做错了什么。这种将lambda函数应用于数据帧的方法看起来非常强大,也许我应该进一步研究一下。