我使用xlrd
从excel文件中读取数据。
对于存储在文件中的整数,假设63
,xlrd
将其解释为63.0
类型的number
。
为什么xlrd
无法将63
识别为整数?
假设sheet.row(1)[0].value
给了我们63.0
。如何将其转换回63
。
答案 0 :(得分:20)
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)
转换为(62.9, 63, 63.1, etc)
似乎是对我的CPU时间毫无意义的浪费。
答案 1 :(得分:11)
查看documentation中的不同单元格类型,似乎单元格没有任何整数类型,它们只是浮点数。因此,即使你写了一个整数,这也是你得到浮动的原因。
要将float转换为整数,只需使用int
:
>>> int(63.0)
63
>>> int(sheet.row(1)[0].value)
63
答案 2 :(得分:9)
如果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
希望你觉得这很有用:)
答案 3 :(得分:3)
我从xlrd
文档中提醒了这个宝石:
Excel电子表格中的日期
实际上,没有这样的事情。你有什么浮点 数字和虔诚的希望。
整数也是如此。也许减去虔诚的希望。
答案 4 :(得分:0)
我编写的代码试图将数字转换为Excel显示的字符串。该方法适用于至少整数和带逗号后两位数的数字。它也适用于许多其他格式。
这个想法,截图和代码在这里:http://uucode.com/blog/2013/10/22/using-xlrd-and-formatting-excel-numbers/
答案 5 :(得分:0)
跟随 this useful answer 到 related question:pandas.DataFrame.convert_dtypes 方法尝试将返回的 dtypes
中的列转换为其他(目前是实验性的)DataFrame
。这些 dtypes
包括 Int64
、boolean
和 StringDtype
,它们也处理缺失值。请参阅 Working with text data 以了解转换为 string
列的动机以及 this section 上的 kleene logical operators 以了解 boolean
列的优势。