我用来xlrd
从excel文件中读取数据。
对于存储在文件中的整数,比方说63
,将其xlrd
解释为63.0
type number
。
为什么不能xlrd
识别63
为整数?
假设sheet.row(1)[0].value
给了我们63.0
. 我怎样才能将其转换回63
.
Excel 将所有数字视为浮点数。一般来说,它不关心是否your_number % 1 == 0.0
真实。
示例:A1 = 63.0, B1 = 63, C1 = INT(A1), A2 = TYPE(A1), B2 = TYPE(B1), C2 = TYPE(C1)
您会看到TYPE()
在每种情况下都返回 1。
从 Excel 帮助:
If value is TYPE returns
Number 1
Text 2
Logical value 4
Error value 16
Array 64
xlrd
报告它的发现。xlrd
在将其暴露给您之前不会破坏其输入。对我来说,将一列从(62.9, 63.0, 63.1, etc)
to转换(62.9, 63, 63.1, etc)
似乎是对 CPU 时间的毫无意义的浪费。
查看文档中的不同单元格类型,似乎单元格没有任何整数类型,它们只是浮点数。因此,这就是即使你写了一个整数也会得到浮点数的原因。
要将浮点数转换为整数,只需使用int
:
>>> int(63.0)
63
>>> int(sheet.row(1)[0].value)
63
如果您将 excel 表中的所有条目都作为整数的数字,jcollado 给出的答案是可以的。但是假设你有一个浮点数,你总是可以设置一个检查条件,比如 -
if i==int(i): //checking for the integer:
print int(i) // solving your problem and printing the integer
else:
print i //printing the float if present
希望你觉得这个有用 :)
我想起了xlrd
文档中的这个宝石:
Excel 电子表格中的日期
实际上,没有这样的事情。你所拥有的是浮点数和虔诚的希望。
整数也是如此。也许减去虔诚的希望。
按照对相关问题的有用答案:pandas.DataFrame.convert_dtypes方法尝试将返回的列转换为其他(目前是实验性的) 。这些包括,并且还处理缺失值。有关转换为列的动机,请参阅处理文本数据,以及有关kleene 逻辑运算符的本节以了解列的优点。dtypes
DataFrame
dtypes
Int64
boolean
StringDtype
string
boolean
我编写的代码尝试将数字转换为 Excel 显示的字符串。该方法至少适用于整数和逗号后有两位数字的数字。它也应该适用于许多其他格式。
想法、截图和代码在这里:http ://uucode.com/blog/2013/10/22/using-xlrd-and-formatting-excel-numbers/