read_csv from exportar errors data create columns python numpy pandas

python - from - float64 con pandas to_csv



pandas read_csv skip columns (2)

Como se mencionó en los comentarios, es un problema de coma flotante general.

Sin embargo, puede usar la palabra clave to_csv de to_csv para ocultarlo:

df.to_csv(''pandasfile.csv'', float_format=''%.3f'')

o, si no desea que 0.0001 se redondee a cero:

df.to_csv(''pandasfile.csv'', float_format=''%g'')

Te regalaré:

Bob,0.085 Alice,0.005

en tu archivo de salida.

Para obtener una explicación de %g , consulte el Mini-Idioma de la especificación de formato .

Estoy leyendo un archivo CSV con números flotantes como este:

Bob,0.085 Alice,0.005

E importar en un marco de datos, y escribir este marco de datos en un lugar nuevo

df = pd.read_csv(orig) df.to_csv(pandasfile)

Ahora este pandasfile tiene:

Bob,0.085000000000000006 Alice,0.0050000000000000001

¿Qué ocurre? tal vez tengo que lanzar a un tipo diferente como float32 o algo así?

Estoy usando pandas 0.9.0 y numpy 1.6.2 .


Es un error en pandas, no solo en la función "to_csv", sino también en "read_csv". No es un problema general de coma flotante, a pesar de que es cierto que la aritmética de punto flotante es un tema que exige cierto cuidado por parte del programador. Este artículo a continuación aclara un poco este tema:

http://docs.python.org/2/tutorial/floatingpoint.html

Un clásico de una línea que muestra el "problema" es ...

>>> 0.1 + 0.1 + 0.1 0.30000000000000004

... que no muestra 0.3 como uno esperaría. Por otro lado, si maneja el cálculo utilizando la aritmética de punto fijo y solo en el último paso emplea la aritmética de punto flotante , funcionará como espera. Mira esto:

>>> (1 + 1 + 1) * 1.0 / 10 0.3

Si necesita evitar desesperadamente este problema, le recomiendo que cree otro archivo CSV que contenga todas las cifras como enteros, por ejemplo multiplicando por 100, 1000 u otro factor que resulte conveniente. Dentro de su aplicación, lea el archivo CSV como de costumbre y obtendrá esas cifras enteras. Luego convierta esos valores a coma flotante, dividiendo por el mismo factor que multiplicó antes.