【发布时间】: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 类型的实例?