2012-01-11 13 views
9

Uso xlrd para leer datos de archivos de Excel.Los enteros de los archivos de Excel se vuelven flotantes?

Para enteros almacenados en los archivos, digamos 63, la xlrd lo interpreta como 63.0 de tipo number.

¿Por qué no se puede xlrd reconocer 63 como un número entero?

Asumir sheet.row(1)[0].value nos da 63.0. ¿Cómo puedo convertirlo de nuevo a 63.

+0

Simplemente sería int (yourfloat), ¿no? http://docs.python.org/library/functions.html#int. No publicaré una respuesta: siento que puedo insultarte y probablemente me haya perdido algo. – stackuser10210

+0

@ stackuser10210 Me pregunto por qué el número entero 63 en la hoja de cálculo se convierte en 63.0. –

+0

No tengo idea. No estoy familiarizado con xlrd y nunca he hecho algo similar. Si realmente son enteros en Excel (es decir, A1 = 63.0, B1 = Int (A1), y obtiene 63.0 desde B1, entonces puedo entender el problema. Lo siento, no tengo una respuesta. – stackuser10210

Respuesta

10

Al observar los diferentes tipos de celdas en el documentation, parece que no hay ningún tipo entero para las celdas, solo son flotadores. Por lo tanto, esa es la razón por la que recuperas las carrozas incluso cuando escribiste un número entero.

Para convertir un flotante a un entero sólo tiene que utilizar int:

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

Terminología de Woolly. '63.0' ya es un entero.' int (some_float) 'trunca su arg a un entero y devuelve ese valor como un objeto' int' –

+0

Pero ¿cómo? ¿sabes si es un flotador o un int? –

2

Me acuerdo de esta joya de los documentos: xlrd

fechas en hojas de cálculo Excel

En realidad, no hay tales cosas. Lo que tienes son números flotantes números y esperanza piadosa.

Lo mismo ocurre con los enteros. Quizás menos la esperanza piadosa.

+0

Dato interesante. –

9

La respuesta dada por jcollado está bien si tiene todas las entradas en la hoja de Excel como números que son enteros. Pero supongamos que tiene un número que es un flotador que siempre puede poner una condición de comprobación como -

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 

Esperamos que esta utilidad :)

+1

Gracias minocha. –

+0

np @TerryLiYifeng :) – minocha

16

trata de Excel todos los números como flotadores. En general, no importa si your_number % 1 == 0.0 es verdadero o no.

Ejemplo: A1 = 63.0, B1 = 63, C1 = INT(A1), A2 = TYPE(A1), B2 = TYPE(B1), C2 = TYPE(C1) Verá que TYPE() devuelve 1 en cada caso.

De la Ayuda de Excel:

If value is TYPE returns 
Number  1 
Text   2 
Logical value 4 
Error value 16 
Array   64 

xlrd informa de lo que encuentra. xlrd no destruye su entrada antes de exponerlo a usted. Convertir una columna de (62.9, 63.0, 63.1, etc) a (62.9, 63, 63.1, etc) me parecería una pérdida inútil de tiempo de CPU.

+6

+1. No hay nada mejor que escucharlo directamente del autor de 'xlrd'. –

-1

Añadir apóstrofe como prefijo a los números guardados en la hoja de Excel. Al hacer eso, los enteros se pueden importar como enteros, pero no como números de coma flotante.

Me funcionaba sin problemas.

+0

Si bien esta es una respuesta anterior, no aborda la pregunta formulada. La pregunta se relaciona con xlrd, y la forma en que analiza los números. – Joundill

Cuestiones relacionadas