Примените операцию и операцию деления на одном шаге с помощью python

Я пытаюсь определить пропорцию существительных в моем тексте, используя приведенный ниже код, и это дает мне ошибку. Я использую функцию, которая вычисляет количество существительных в моем тексте, и у меня есть общее количество слов в другом столбце.

pos_family = {
    'noun' : ['NN','NNS','NNP','NNPS']
}

def check_pos_tag(x, flag):
    cnt = 0
    try:
        for tag,value in x.items():
            if tag in pos_family[flag]:
                cnt +=value
    except:
        pass
    return cnt

df2['noun_count'] = df2['PoS_Count'].apply(lambda x: check_pos_tag(x, 'noun')/df2['word_count'])

Примечание: я использовал пакет nltk для получения счетчиков по тегам PoS, и у меня есть счетчики в словаре в столбце PoS_Count в моем фрейме данных.

Если я удалю "/ df2 ['word_count']" при первом запуске и получу счетчик существительных, снова включу его и запустю, он будет работать нормально, но если я запустил его в первый раз, я получу ошибку ниже.

ValueError: Wrong number of items passed 100, placement implies 1

Любая помощь приветствуется

Заранее спасибо!

Можем ли мы увидеть некоторые образцы данных для df2

It_is_Chris 10.08.2018 17:01

Вот пример данных word_count PoS_Count 0 601 {'JJ': 65, 'NN': 117, 'VBG': 24, 'CD': 4} 1 201 {'JJ': 19, 'NN': 39, ' NNP ': 6,' VBZ ': 1} 2 180 {' NN ': 34,' JJ ': 15,' RB ': 5,' VBD ': 15}

kkumar 10.08.2018 17:14
0
2
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как вы уже догадались, проблема в бите /df2['word_count'].

df2['word_count'] - это серия pandas, но здесь вам нужно использовать float или int, потому что вы делите на него check_pos_tag(x, 'noun') (который является int).

Возможное решение - извлечь соответствующее поле из ряда и использовать его в лямбде.

Однако было бы проще (и, возможно, быстрее) выполнять каждую операцию в одиночку.
Попробуйте это:

df2['noun_count'] = df2['PoS_Count'].apply(lambda x: check_pos_tag(x, 'noun')) / df2['word_count']

Я знал, что могу получить желаемый результат, если проведу два вычисления по отдельности, но подумал о том, чтобы проверить, есть ли способ сделать это за один шаг. Спасибо! Ваше решение сработало!

kkumar 10.08.2018 22:06

Другие вопросы по теме