impossible de lire un fichier délimité par des tabulations dans un numpy 2-D de la matrice de
Je suis tout à fait nouveau pour nympy et je suis en train de lire une tabulation(\t) fichier texte délimité dans un tableau numpy matrice en utilisant le code suivant:
train_data = np.genfromtxt('training.txt', dtype=None, delimiter='\t')
Le contenu du fichier:
38 Private 215646 HS-grad 9 Divorced Handlers-cleaners Not-in-family White Male 0 0 40 United-States <=50K
53 Private 234721 11th 7 Married-civ-spouse Handlers-cleaners Husband Black Male 0 0 40 United-States <=50K
30 State-gov 141297 Bachelors 13 Married-civ-spouse Prof-specialty Husband Asian-Pac-Islander Male 0 0 40 India >50K
ce que j'attends est un 2-D de la matrice de la matrice de la forme (3, 15)
mais avec mon code ci-dessus, je ne reçois qu'une seule rangée de matrice de la forme (3,)
Je ne suis pas sûr de savoir pourquoi ces quinze champs de chaque ligne ne sont pas assignés à une colonne de chaque.
J'ai aussi essayé d'utiliser numpy est loadtxt (), mais il ne pouvait pas gérer les conversions de type sur mes données que j'ai.e même si j'ai donné dtype=None, il a essayé de convertir les chaînes de caractères par défaut de type float et a échoué à elle.
Essayé de code:
train_data = np.loadtxt('try.txt', dtype=None, delimiter='\t')
Error:
ValueError: could not convert string to float: State-gov
Les pointeurs?
Grâce
Oh je pourrais résoudre ce à l'aide d'un plus traditionnelles lectures de fichier (au format csv reader)
Merci @abiessu. dtype=np.str fonctionne très bien mais je ne voulez pas convertir toutes les cordes. Donc je comptais sur dtype=None pour faire de l'auto typecasting pour moi, où il donne des " int " ou "détacher" une priorité plus élevée sur les Chaînes à jongler avec les chiffres
OriginalL'auteur Abhi | 2013-10-06
Vous devez vous connecter pour publier un commentaire.
En fait le problème ici est que
np.genfromtxt
etnp.loadtxt
à la fois le retour d'un structuré tableau si le dtype est structuré (c'est a dire a plusieurs types). Votre tableau de rapports à une forme de(3,)
, parce que techniquement c'est un tableau 1d de "enregistre". Ces "dossiers" contenir tous vos colonnes, mais vous pouvez accéder à toutes les données comme si c'était de la 2d.Vous chargez correctement:
Comme vous l'avez signalé, il a un 1d forme:
Mais l'ensemble de vos données est-il:
La
dtype
du tableau est structuré de la manière suivante:Et vous pouvez toujours accéder à "colonnes" (connu sous le nom champs) en utilisant les noms donnés dans la dtype:
Il est plus facile de donner des noms appropriés pour les champs:
Ainsi, vous pouvez maintenant accéder à la
'age'
champ, etc.:Ou sur les revenus des personnes de moins de 35
et plus de 35
OriginalL'auteur askewchan
Je ne crois pas Numpy tableaux de gérer différents types de données dans un tableau unique. Ce qui peut être fait, est en charge de l'ensemble de l'éventail des chaînes de caractères, puis de convertir les colonnes nécessaires pour les numéros nécessaires
le problème, c'est que numpy ne semble pas être en mesure de traiter avec différents types de champ afin de construire un tableau à deux dimensions, de sorte DrRobotNinja 's réponse est assez utile
Je vous encourage à apprendre sur la façon numpy traite de différents types de champs dans un tableau unique, plutôt que d'essayer de déjouer par la conversion de tous les numéros de chaînes. Il peut être très utile! Voir les deux autres réponses ici.
OriginalL'auteur DrRobotNinja
Mise à jour de réponse
Désolé, j'ai mal lu votre question initiale:
Je pense que vous ne comprenez pas ce que
np.genfromtxt()
sera de retour. Dans ce cas, il va essayer d'en déduire le type de chaque "colonne" dans votre fichier texte et vous redonner un structurée /"enregistrer" array. Chaque ligne contient plusieurs champs (f0...f14
), dont chacun peut contenir des valeurs de type différent correspondant à une "colonne" dans votre fichier texte. Vous pouvez indexer un champ particulier par nom, par ex.data['f0']
.Il vous suffit de ne peut pas ont un
(3,15)
tableau numpy de types hétérogènes. Vous peut ont un(3,15)
homogène tableau de chaînes de caractères, par exemple:Alors bien sûr, vous pouvez manuellement jeté les colonnes quel que soit le type que vous voulez, comme dans @DrRobotNinja de réponse. Cependant, vous pourriez tout aussi bien laisser numpy créer un tableau structuré pour vous, alors l'index par domaine et d'attribuer les colonnes de nouveaux tableaux.
OriginalL'auteur ali_m