Нахождение подстроки в пандах фрозенсет - PullRequest
2 голосов
/ 28 марта 2019

Я пытаюсь найти подстроку в frozenset, однако у меня немного нет выбора.

Моя структура данных - это pandas.dataframe (из пакета association_rules из mlxtend, если вы знакомы с ним), и я хочу напечатать все строки, где находятся антецеденты (что являетсяfrozenset) включает определенную строку.

Образцы данных: enter image description here

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

Однако при каждом запуске я получаю пустой фрейм данных.

Когда я пытаюсь запустить только внутреннюю функцию в моей серии rules["antecedents"], я получаю только ложные значения для всех записей.Но почему это так?

1 Ответ

4 голосов
/ 28 марта 2019

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

...