2012-01-11 50 views
9

我使用xlrd來讀取excel文件中的數據。從excel文件整數變成浮動?

對於存儲在文件中的整數,假設63xlrd將其解釋爲number類型的63.0

爲什麼xlrd不能識別63作爲整數?

假設sheet.row(1)[0].value給我們63.0。我怎樣才能將它轉換回63

+0

它只是int(yourfloat),不是嗎? http://docs.python.org/library/functions.html#int。我不會作爲回答發佈 - 我覺得我可能會侮辱你,可能錯過了一些東西。 – stackuser10210 2012-01-11 19:52:08

+0

@ stackuser10210我想知道爲什麼電子表格中的整數63變爲63.0。 – 2012-01-11 19:54:13

+0

不知道。我對xlrd不熟悉,我從來沒有做過類似的事情。如果他們真的是excel中的整數(即,A1 = 63.0,B1 = Int(A1),並且你從B1中獲得63.0,那麼我可以理解這個問題,對不起,我沒有答案 – stackuser10210 2012-01-11 20:01:31

回答

10

看看documentation中的不同單元類型,似乎沒有任何整數類型的單元格,它們只是浮動。因此,即使你寫了一個整數,這也是你獲得浮動的原因。

爲浮點轉換爲整數只使用int

>>> int(63.0) 
63 
>>> int(sheet.row(1)[0].value) 
63 
+0

粗糙的術語'63.0'已經是一個整數了'int(some_float)'將它的arg截斷爲一個整數,並將該值作爲int對象返回 – 2012-01-11 21:44:05

+0

但是你知道這是浮點數還是整數嗎? – 2015-12-04 17:24:47

2

我想起這個寶石從xlrd文檔:在Excel電子表格

日期

實際上,沒有這樣的事情。你有什麼是浮點數 和虔誠的希望。

整數也是如此。也許減去虔誠的希望。

+0

有趣的點。 – 2012-01-11 20:49:35

9

由jcollado給出的答案是正常的,如果你在excel表中的所有條目都是整數的數字。 但是,假設你有一個數是浮點數,你可以隨時把檢查條件一樣 -

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 

希望對您有所幫助:)

+1

感謝minocha。 – 2012-01-11 21:09:16

+0

np @TerryLiYifeng :) – minocha 2012-01-11 23:26:35

16

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時間。

+6

+1。它不會比直接從xlrd的作者那裏聽到更好。 – 2012-01-11 21:31:32

-1

前綴添加撇號保存在Excel工作表中的數字。通過這樣做,整數可以作爲整數輸入,但不能作爲浮點數輸入。

它在爲我工作沒有任何問題。

+0

雖然這是一箇舊的答案,但它沒有解決問題。這個問題涉及到xlrd,以及它解析數字的方式。 – Joundill 2018-03-05 22:20:05