#python #pandas #dataframe
Вопрос:
Предположим, что это набор данных, над которым я работаю:
df1 = pd.DataFrame(['you youe', 'you You YOU', 'eyou Young'], columns=['words'])
print(df1)
Я надеюсь подсчитать частоту строк » вы » и » ваш » как слов, независимо от того, что предшествует или следует за этими строками, и независимо от нижнего или верхнего регистра.
Я поместил строки, подобные «youe», чтобы проверить, не ошибается ли мой код.
это то, что я пробовал до сих пор:
df1['counts']=df1['words'].str.count(' you|you. |you, |you | You | YOU|YOU. |YOU, |YOU|YOU | your|your | Your|Your | YOUR|YOUR ')
print(df1)
Ожидаемый результат будет:
words count
0 you youe 1
1 you You YOU 3
2 eyou Young 0
Но я получаю:
words count
0 you youe 1
1 you You YOU 2
2 eyou Young 1
Ответ №1:
Используйте границы слов bb
с опциональным совпадением r
, так как возможен тест без учета регистра, добавьте re.I
флаг:
import re
df1['new'] = df1['words'].str.count(r'b(you[r]*)b', flags=re.I)
print (df1)
words new
0 you youe 1
1 you Your YOU 3
2 eyou Young 0
Комментарии:
1. Это очень хорошо работает для фрейма данных, но я пытался использовать .count(r’b(вы[r]*)b’, флаги=re. I) в одну строку я получаю: «count() не принимает аргументов ключевых слов». действительно снова нуждаюсь в вашем руководстве.
2. @deLaJU — использовать
a = 'you youe'
иout = pd.Series([a]).str.count(r'b(you[r]*)b', flags=re.I).iat[0]