【问题标题】:Find index value of cell in a sheet using python使用python查找工作表中单元格的索引值
【发布时间】:2019-04-25 06:48:32
【问题描述】:
Product Name
SET I Violations 
Rule 1   0 
Rule 2   5 
Rule 3   0
Total    5

SET II Violations 
Rule 1   2
Rule 2   1 
Rule 3   1 
Total    4

SET III Violations
Rule 1    0 
Rule 2    0 
Rule 3    2 
Total     2

我想找到一个包含 SET I、SET II、SET III、SET IV 和 Total 的单元格索引。就像上面的示例 SET I 在 1,0 Total at 5,0... 并且规则不固定它们可以增加或减少

我尝试了以下代码:

import xlrd
import xlwt
from xlwt import Workbook
wb = xlrd.open_workbook('test.xls')
sheet = wb.sheet_by_index(0)
for row_num in range(sheet.nrows):
    row_value = sheet.row_values(row_num)
    if row_value[0].startswith('SET') :
     print (row_value.row,row_value.column)

以上代码给出以下错误: AttributeError: 'list' 对象没有属性 'row'

【问题讨论】:

  • 使用熊猫series.str.contains()
  • @anky_91 我想找到以 SET 和 Total 开头的单元格索引。我知道如何检查它是否以字符串开头,但第二部分是我想在 excel 中查找该字符串的索引

标签: python excel python-3.x pandas xlwt


【解决方案1】:

假设您使用 pandas 阅读后 df 看起来像这样:

df=pd.read_excel(file)
print(df)

   Product        Name
0    SET I   Violations
1    Rule 1           0
2    Rule 2           5
3    Rule 3           0
4     Total           5
5    SET II  Violations
6    Rule 1           2
7    Rule 2           1
8    Rule 3           1
9     Total           4
10  SET III  Violations
11   Rule 1           0
12   Rule 2           0
13   Rule 3           2
14    Total           2

然后您可以如下使用series.str.startswith() 并调用True 行的索引。

df[df.Product.str.startswith('SET')].index
#Int64Index([0, 5, 10], dtype='int64')

【讨论】:

  • 不,我不想在数据框中找到字符串的索引。我想在 exel 表中找到字符串。请阅读我在示例 excel SET 中提到的问题,我在 1,0索引然后 Total 在 5,0 然后 SET II 在 6,0..我想找到那个索引
【解决方案2】:

因为你检查'Rule'和'Total'的值在列索引0,你可以直接打印0,

import xlrd
wb = xlrd.open_workbook('test.xls')
sheet = wb.sheet_by_index(0)
for row_num in range(sheet.nrows):
    row_value = sheet.row_values(row_num)
    if row_value[0].startswith('SET') :
        print(row_value[0],'-(row,col): ',row_num,",0",sep='')
    if row_value[0].startswith('Total') :
        print(row_value[0],'-(row,col): ',row_num,",0",sep='')

  >>
SET I-(row,col): 1,0
Total-(row,col): 5,0
SET II-(row,col): 7,0
Total-(row,col): 11,0
SET III-(row,col): 13,0
Total-(row,col): 17,0

【讨论】:

    【解决方案3】:

    你需要printrow_num 并且列索引会因为if条件为0

    import xlrd
    import xlwt
    from xlwt import Workbook
    wb = xlrd.open_workbook('test.xls')
    sheet = wb.sheet_by_index(0)
    for row_num in range(sheet.nrows):
        row_value = sheet.row_values(row_num)
        if row_value[0].startswith('SET') :
            #because of if condition column index will be 0
            print (row_num,0)
    

    如果索引不固定,那么您可以打印具有值 'SET' 的元素的索引

    if 'SET' in row_value:
        print(row_num, row_value.index('SET'))
    

    【讨论】:

    • 是的,它正在工作..但是列值始终不会为 0...如果我想为列不是 0 的行找到相同的值,答案应该是什么??
    • @AkashWarkhade 更新了答案。请确认这是否适合您
    • @AkashWarkhade 如果这能解决您的问题,您可以接受答案
    猜你喜欢
    • 2023-03-13
    • 2019-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多