【问题标题】:Retrieve int value from Excel if it is an int Python如果它是 int Python,则从 Excel 中检索 int 值
【发布时间】:2020-03-06 12:02:30
【问题描述】:

我从 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))

但这会返回带小数点的整数:

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: int() 以 10 为底的无效文字:'Version'

【问题讨论】:

  • I do not want to have decimal points if the number does not include it. - 该列中的其他值是实际的浮点数,所以我建议保持这种状态(将整列保持一种类型),然后调整打印格式。
  • 至于错误 - 你也抓住了标题。您需要先检查您的值是否浮动:将 if 行更改为 if isinstance(worksheet.cell_value(row, col), float) and worksheet.cell_value(row, col) == int(worksheet.cell_value(row, col))
  • @h4z3 我只是在想,我的项目没有一个用例,其中列将混合浮点数和整数。它是一个或另一个。我已经编辑了我的问题以反映这一点。在这种情况下我将如何调整打印格式?
  • 我也不确定你的第二个答案是什么意思。为什么我要检查该值是否是 float 和 int 类型的实例?

标签: python excel xlrd


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-21
    • 2015-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    • 2011-02-26
    相关资源
    最近更新 更多