Найти значение индекса ячейки на листе, используя python - PullRequest
0 голосов
/ 25 апреля 2019
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 при 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'

Ответы [ 3 ]

2 голосов
/ 25 апреля 2019

Предполагается, что 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')
0 голосов
/ 25 апреля 2019

, поскольку ваши значения для проверки 'Rule' и 'Total' находятся в столбце index 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
0 голосов
/ 25 апреля 2019

Вам нужно print row_num и индекс столбца будет равен 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'))
...