2010-07-14 6 views
3

J'ai écrit un script pour prendre des fichiers de données qui sont dans les colonnes et les tracer en fonction de la colonne que l'utilisateur veut voir. Eh bien, j'ai remarqué que les graphes ont l'air dingue, et qu'ils ont tous les mauvais numéros parce que python ignore l'exponentielle.types de données python

Mes numéros sont au format: 1.000000e + 1 OU 1.000000e-1

Qu'est-ce que DTYPE est-ce? J'utilise numpy.genfromtxt pour importer avec un dtype = float. Je sais qu'il y a toutes sortes de types que vous pouvez entrer, mais je ne peux pas trouver une liste complète des options et des exemples.

Merci.

Voici un exemple de mon entrée (ces espaces sont des onglets):

Horodatage T1_ModBt T2_90Bend T3_InPE T5_Stg2Rfrg
05h22 2.115800E + 2 + 0 1.400000E 1.400000E + 0 + 1 3.035100E
05:23 2.094300E + 2 1.400000E + 0 + 0 1.400000E 3.034800E + 1
05:24 2.079300E + 2 1.400000E + 0 + 0 1.400000E 3.031300E + 1
05:25 2.069500E + 2 1.400000E + 0 + 0 1.400000E 3.031400E 1
05:26 2.052600E + 2 1.400000E + 0 + 0 1.400000E
3.030400E + 1 05:27 2.040700E + 2 1.400000E + 0 + 0 1.400000E 3.029100E + 1

Mise à jour J'ai compris au moins une partie de la raison pour laquelle ce que je fais ne fonctionne pas. Je ne sais toujours pas comment définir les dtypes comme je le veux.

import numpy as np 

file = np.genfromtxt('myfile.txt', usecols = (0,1), dtype = (str, float), delimiter = '\t') 

Cela renvoie un tableau de chaînes pour chaque colonne. Comment puis-je lui dire que je veux que la colonne 0 soit un str, et que toutes les autres colonnes soient flottantes?

Répondre

0

Je pense que vous voudrez obtenir un analyseur de texte pour analyser le format dans un type de données python natif.

comme 1.00000E + 1 se transforme en 1.0^1, ce qui pourrait être exprimé comme un flotteur.

1
In [55]: type(1.000000E+1) 
Out[55]: <type 'float'> 

Que fait votre données d'entrée ressemblent, il est possible juste que ce soit dans le format d'entrée mauvais, mais il est aussi sûr qu'il est assez facile de le convertir au bon format.

+0

Il ressemble à des colonnes de chiffres. Ok, bien sûr, il y a une ligne d'en-tête, que je saute.La première colonne est un timestamp dans ce format: 12:00 AM, mais je le charge comme dtype = str, et ça marche très bien. Si le nombre est 1.000000E + 1, le nombre qu'il tracera est 1.000000, et non 10 ... – lollygagger

+0

Modifiez votre question et copiez/collez à partir de votre fichier texte. –

1

numéros sous la forme 1.0000E+1 peuvent être analysés par float(), donc je ne sais pas quel est le problème:

>>> float('1.000E+1') 
10.0 
+0

Merci d'avoir souligné cela, je suis un débutant total et il ne me vient pas à l'esprit comme un chèque. Mais maintenant je suis plus perplexe ... – lollygagger