2

我试图在 freezeset 中找到一个子字符串,但是我有点没有选择。

我的数据结构是一个 pandas.dataframe (如果你熟悉它,它association_rules来自mlxtend包中的那个),我想打印所有前件(这是一个frozenset)包含特定字符串的行。

样本数据: 在此处输入图像描述

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

但是,每当我运行它时,我都会得到一个空数据框。

当我尝试只在我的系列上运行内部函数时rules["antecedents"],我只得到所有条目的 False 值。但这是为什么呢?

4

1 回答 1

4

因为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如果您的意思是元素上的完全匹配,您可能想要使用

于 2019-03-28T16:50:48.243 回答