как мне найти вхождение и процент вхождения слова в строку; как исправить ошибку - PullRequest
2 голосов
/ 08 июля 2019

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

, поэтому для процентной проблемы я решил сначала создать код для подсчета вхождения слов "true" и "false" в столбце, а затем я быЯ просто немного посчитал, чтобы получить проценты, но я не смог просчитать это.Произведение приведенных ниже кодов было 0, и это не то, что предполагается отображать.

import pandas as pd
import xlrd
df = pd.read_excel (r'C:\New folder\CrohnsD.xlsx')
print (df)
df['has_word_icd'] = df.apply(lambda row: True if 
row.str.contains('ICD').any() else False, axis=1)
print(df['has_word_icd'])
#df.to_excel(r'C:\New folder\done.xlsx')
test_str = "df['has_word_icd']"
counter = test_str.count('true')
print (str(counter))

это обновленная версия, и она по-прежнему дает мне 0, я не могу изменить df ['has_word_icd'], потому что именно так переменная вводится изначально

import pandas as pd
import xlrd
df = pd.read_excel (r'C:\New folder\CrohnsD.xlsx')
print (df)
df['has_word_icd'] = df.apply(lambda row: True if 
row.str.contains('ICD').any() else False, axis=1)
print(df['has_word_icd'])
#df.to_excel(r'C:\New folder\done.xlsx')

test_str = (df['has_word_icd'])

count = 0
for i in range(len(test_str)):
   if test_str[i] == 'true':
        count += 1
  i += 1

print(count)

оба дали мнетот же результат

, пожалуйста, помогите мне, вывод из обоих кодов "0", и это не должно быть так.Кто-нибудь, помогите мне получить код, который просто дает мне процент «истинного» и «ложного» * ​​1011 *

Ответы [ 2 ]

1 голос
/ 08 июля 2019

Вот способ сделать это, используя понимание списка. Для процента вы можете использовать функцию np.mean():

import numpy as np

df= pd.DataFrame({'a' : ['hello icd', 'bob', 'bob icd', 'hello'],
                  'b' : ['bye', 'you', 'bob is icd better', 'bob is young']})

df['contains_word_icd'] = df.apply(lambda row :
                                   any([True if 'icd' in row[x] else False for x in df.columns]), axis=1)
percentage = np.mean(df['contains_word_icd'])
# 0.5

Выход:

           a                  b  contains_word_icd
0  hello icd                bye               True
1        bob                you              False
2    bob icd  bob is icd better               True
3      hello       bob is young              False
0 голосов
/ 08 июля 2019

Основная проблема лежит здесь: "df['has_word_icd']". Вы помещаете переменную в кавычки, что для python означает простую строку. Правильно будет test_str = df[has_word_icd]

Затем вы перебираете test_str следующим образом:

count  = 0
for i in range(len(test_str)):
  if test_str[i] == 'true':
        count += 1
  i += 1

print(count)

Тогда получите процент:

percent = (count / range(len(df[has_word_icd]]) * 100

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...