Поскольку функции 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
, если имеете в виду точное совпадение элемента