import pandas as pd
df = pd.DataFrame({'user': ['Bob', 'Jane', 'Alice'],
'income': [40000, 50000, 42000]})
У меня есть список фильтров:
f = ['A', 'B', 'C']
и хотите получить все данные, например:
df[df.user.str.startswith(f)]
Конечно это не работает, пишу сюда ошибку для поисковых систем, может кому поможет
>>> TypeError: ufunc 'invert' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
Используйте совпадение:
import pandas as pd
df = pd.DataFrame({'user': ['Bob', 'Jane', 'Alice'],
'income': [40000, 50000, 42000]})
f = ['A', 'B', 'C']
res = df[df['user'].str.match(rf'{"|".join(f)}')]
print(res)
Выход
user income
0 Bob 40000
2 Alice 42000
Из документации по матчу:
Определите, начинается ли каждая строка с совпадения с регулярным выражением.
Вам нужно передать кортеж.
Из Документов:
str.startswith(prefix[, start[, end]])
Вернуть
True
, если строка начинается сprefix
, иначе вернутьFalse
.prefix
также может быть набором префиксов для поиска.
import pandas as pd
df = pd.DataFrame({'user': ['Bob', 'Jane', 'Alice'],
'income': [40000, 50000, 42000]})
f = ['A', 'B', 'C']
df[df.user.str.startswith(tuple(f))]
Выход:
user income
0 Bob 40000
2 Alice 42000
Спасибо! Извините, что «не принял» ваш ответ, мне очень нравится ваше решение!
Спасибо за ответ. Я принимаю ваш ответ, так как он более общий.