从 Excel 中检索 int 值,如果它是一个 int Python

Retrieve int value from Excel if it is an int Python

我从 Excel 电子表格中获取了以下数据:

如您所见,有些行包含浮点数,有些行包含整数。 使用下面的程序,如果我使用 worksheet.cell_value(row, col) 检索每个值,那么每个 int 都将作为浮点数检索。例如,随机数列中的 321 被检索为 321.0.

如果数字不包含小数点,我不想有小数点。我在网上看到了几个例子,特别是 this 一个,但我没有找到任何答案。

到目前为止,我有:

import xlrd

workbook = xlrd.open_workbook("demo.xlsx")
worksheet = workbook.sheet_by_name('Sheet1')

num_rows = worksheet.nrows
num_cols = worksheet.ncols

for row in range(num_rows):
    for col in range(num_cols):
        if isinstance(worksheet.cell_value(row, col), float):
            print(worksheet.cell_value(row, col))
        elif isinstance(worksheet.cell_value(row, col), int):
            print(int(worksheet.cell_value(row, col)))
        else:
            print(worksheet.cell_value(row, col))

但是这个returns带小数点的整数:

Version
Name
Random Number
1.1
Smith
321.0
1.2
John
1234.0
2.1
Paul
123456.0
2.2
Rich
98765.0
2.3
Harvey
567.0
2.4
Jones
90909.0

或者,我试过:

import xlrd

workbook = xlrd.open_workbook("demo.xlsx")
worksheet = workbook.sheet_by_name('Sheet1')

num_rows = worksheet.nrows
num_cols = worksheet.ncols

for row in range(num_rows):
    for col in range(num_cols):
        if worksheet.cell_value(row, col) == int(worksheet.cell_value(row, col)):
            print(int(worksheet.cell_value(row, col)))
        else:
            print(worksheet.cell_value(row, col))

但是我得到一个错误:

ValueError: invalid literal for int() with base 10: 'Version'

我在第二个代码示例中走在了正确的轨道上,但我必须确保任何字符串也被评估:

import xlrd

workbook = xlrd.open_workbook("demo.xlsx")
worksheet = workbook.sheet_by_name('Sheet1')

num_rows = worksheet.nrows
num_cols = worksheet.ncols

for row in range(num_rows):
    for col in range(num_cols):
        if isinstance(worksheet.cell_value(row, col), str):
            print(worksheet.cell_value(row, col))
        elif worksheet.cell_value(row, col) == int(worksheet.cell_value(row, col)):
            print(int(worksheet.cell_value(row, col)))
        else:
            print(worksheet.cell_value(row, col))

结果:

Version
Name
Random Number
1.1
Smith
321
1.2
John
1234
2.1
Paul
123456
2.2
Rich
98765
2.3
Harvey
567
2.4
Jones
90909