【问题标题】:how do i find the occurrence and percentage of occurance of a word in a string ; how to fix error我如何找到字符串中单词的出现次数和出现百分比;如何修复错误
【发布时间】:2019-07-08 14:10:56
【问题描述】:

基本上,我有这个上传到 python 的 excel 文件,我创建了一个新列,用于确定每一行中是否有一个单词,如果它在一行中,那么它会显示为 true,如果不是 false。所以我有这个新专栏,我试图找出真假的百分比。稍后我将尝试制作一个表格,将所有真假分开。我首先需要百分比方面的帮助。我是一个初学者,就像我上周开始的一样

所以对于百分比问题,我决定首先创建一个代码来计算列中单词“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”,不应该是这样。有人帮我得到一个代码,直接给我“真”和“假”的百分比

【问题讨论】:

    标签: python counter find-occurrences


    【解决方案1】:

    这是一种使用列表推导式的方法。对于百分比,可以使用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
    

    【讨论】:

    • 谢谢,但这不是我要问的,我已经做了那个代码。我把它作为我的问题的一部分。我要求一种计算真假百分比的方法。不过谢谢
    • 对不起,我看错了你的问题,我更新它来计算每行每列包含单词 icd 的百分比
    • 但是你想要这个百分比还是显示任何行的百分比的全局百分比包含单词 icd ?
    • 我有一列告诉我该行是否包含单词“icd”。因此,如果该行包含 icd,则它具有单词“true”,但如果不包含,则它具有“false”。该列的名称称为“has_word_icd”。现在我正在尝试仅针对“has_word_icd”列的“真”和“假”列的百分比
    • 您可以使用np.mean(df['contains_word_icd']) 来获取True 的百分比。
    【解决方案2】:

    主要问题在这里:"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

    【讨论】:

    • 感谢您的努力,但一旦我打印(计数),它只是打印一堆零
    • @mixjr365cool 我修改了我的答案以修复大写错误。现在应该可以正常工作了,在基于 csv 的 df 上进行了快速测试,对我来说效果很好
    • 我仍然得到相同的零结果。不知道为什么,看代码,我更新了
    • 如果你打印df['has_word_icd'],输出是什么?它是否正确输出您的 True & False 值?我无法复制错误...
    猜你喜欢
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 2016-06-16
    • 2020-06-06
    • 2016-06-28
    相关资源
    最近更新 更多