web-dev-qa-db-ja.com

Excelファイルからの整数はfloatになりますか?

xlrdを使用してExcelファイルからデータを読み取ります。

ファイルに格納されている整数の場合、たとえば_63_の場合、xlrdはそれをタイプnumberの_63.0_として解釈します。

xlrdが_63_を整数として認識できないのはなぜですか?

sheet.row(1)[0].valueが_63.0_を与えると仮定します。どうすればそれを_63_に戻すことができますか。

16
Terry Li

documentation のさまざまなセルタイプを見ると、セルの整数型はなく、単なる浮動小数点数であるようです。したがって、整数を書き込んだ場合でも、フロートが返されるのはそのためです。

Floatを整数に変換するには、intを使用します。

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

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時間の浪費のように思えます。

25
John Machin

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

これがお役に立てば幸いです:)

11
minocha

xlrdドキュメントからこのgemを思い出しました。

Excelスプレッドシートの日付

実際には、そのようなことはありません。あなたが持っているのは浮動小数点数と敬虔な希望です。

同じことが整数にも当てはまります。おそらく、敬虔な希望を差し引いたものです。

3

Excelで表示される数値を文字列に変換しようとするコードを作成しました。このアプローチは、少なくとも整数と、コンマの後に2桁の数字がある場合に機能します。他の多くの形式でも機能するはずです。

アイデア、スクリーンショット、コードは次のとおりです: http://uucode.com/blog/2013/10/22/using-xlrd-and-formatting-Excel-numbers/

0
olpa