如何使用python查找excel中的指定数据(正数在前,负数在附近)
How to find specified data in excel by using python (positive number first appeared and negative number nearby)
我想在 excel 中的每一行中搜索数据,并找出 序列中第一个出现的正数 (A) 和一个负数 (B) 就在 A 之前 。
喜欢:
-5 -6 -3 4 1
我需要数字 -3 和 4
我尝试使用这种代码:
import xlrd
testFile=xlrd.open_workbook('test.xls')
mySheet=testFile.sheet_by_name("Sheet1")
nrows=mySheet.nrows
ncols=mySheet.ncols
def f(j):
value=mySheet.cell(0,j).value
return value
for j in range(ncols):
if f(j)*f(j*1)>0:
print f(j),f(j+1)
但是当我运行它时,出现错误:
Traceback (most recent call last):
File "test1.py", line 15, in (module)
print f(j),f(j+1)
File "test1.py", line 10, in f
value=mySheet.cell(0,j).value
File "C:\Python27\lib\site-packages\xlrd\sheet.py", line 399, in cell
self._cell_types [rowx][colx],
IndexError: array index out of range
我不知道为什么我不能使用函数f(j)*f(j+1)>0
找出第一个正数和附近的负数。
有人能帮忙找出问题吗?
您的范围是从 0 到 j。您正在尝试访问 j+1 值。因此,IndexError:数组索引超出范围。
此外,如果 f(j)*f(j*1)>0:如果 f(j)*f(j+1)<0:您可能想做:这里我更改了两件事.使 j*1 到 j+1 和 >0 到 <0。您正在检查负数正数与负数负数。 f(j)*f(j*1) 应保持 >0,直到找到第一个正数。
并解决索引超出范围 运行 你的循环直到 (ncols-1)
您还可以使用更高效的方式进行操作。只需检查数字是否为正数。如果是,则 return 那个和前一个索引处的值。您不必乘以这是一个额外耗时的命令
我想在 excel 中的每一行中搜索数据,并找出 序列中第一个出现的正数 (A) 和一个负数 (B) 就在 A 之前 。 喜欢: -5 -6 -3 4 1 我需要数字 -3 和 4
我尝试使用这种代码:
import xlrd
testFile=xlrd.open_workbook('test.xls')
mySheet=testFile.sheet_by_name("Sheet1")
nrows=mySheet.nrows
ncols=mySheet.ncols
def f(j):
value=mySheet.cell(0,j).value
return value
for j in range(ncols):
if f(j)*f(j*1)>0:
print f(j),f(j+1)
但是当我运行它时,出现错误:
Traceback (most recent call last):
File "test1.py", line 15, in (module)
print f(j),f(j+1)
File "test1.py", line 10, in f
value=mySheet.cell(0,j).value
File "C:\Python27\lib\site-packages\xlrd\sheet.py", line 399, in cell
self._cell_types [rowx][colx],
IndexError: array index out of range
我不知道为什么我不能使用函数f(j)*f(j+1)>0
找出第一个正数和附近的负数。
有人能帮忙找出问题吗?
您的范围是从 0 到 j。您正在尝试访问 j+1 值。因此,IndexError:数组索引超出范围。
此外,如果 f(j)*f(j*1)>0:如果 f(j)*f(j+1)<0:您可能想做:这里我更改了两件事.使 j*1 到 j+1 和 >0 到 <0。您正在检查负数正数与负数负数。 f(j)*f(j*1) 应保持 >0,直到找到第一个正数。
并解决索引超出范围 运行 你的循环直到 (ncols-1)
您还可以使用更高效的方式进行操作。只需检查数字是否为正数。如果是,则 return 那个和前一个索引处的值。您不必乘以这是一个额外耗时的命令