L'importation de données et les noms de variables à partir d'un fichier texte en Python
J'ai un fichier texte contenant les données de simulation (60 colonnes, 100k lignes):
a b c
1 11 111
2 22 222
3 33 333
4 44 444
... où, dans la première ligne sont les noms des variables, et au-dessous (en colonnes) est le correspondant de données (type float).
J'ai besoin d'utiliser l'ensemble de ces variables avec leurs données en Python pour d'autres calculs. Par exemple, lorsque j'insère:
print(b)
J'ai besoin de recevoir les valeurs de la deuxième colonne.
Je sais comment importer des données:
data=np.genfromtxt("1.txt", unpack=True, skiprows = 1)
Attribuer des variables "à la main":
a,b,c=np.genfromtxt("1.txt", unpack=True, skiprows = 1)
Mais je vais avoir de la difficulté à obtenir les noms de variable:
reader = csv.reader(open("1.txt", "rt"))
for row in reader:
list.append(row)
variables=(list[0])
Comment puis-je modifier ce code pour obtenir tous les noms de variables à partir de la première ligne et de les affecter à l'importés des tableaux ?
Oui, j'ai besoin d'avoir des noms de variables prises à partir de cellules de premier rang. Plus tard, j'ai besoin de multiplier une colonne par un autre ou par une équation et tracer les résultats/enregistrer le fichier.
OriginalL'auteur Michal | 2013-08-10
Vous devez vous connecter pour publier un commentaire.
Au lieu d'essayer d'attribuer des noms, vous pouvez penser à l'aide d'un tableau associatif, qui est connu dans Python comme un
dict
, pour stocker vos variables et de leurs valeurs. Le code pourrait alors ressembler à ceci (emprunt généreusement de lacsv
docs):data
contient alors chacun de vos variables, qui peuvent être accessibles viadata['varname']
.Ainsi, par exemple, vous pourriez faire
data['a']
pour obtenir la liste['1', '2', '3', '4']
compte tenu de l'entrée fourni dans votre question.Je pense que d'essayer de créer des noms basés sur les données dans votre document peut être un peu maladroit façon de le faire, par rapport à la dict basée sur la méthode indiquée ci-dessus. Si vous voulez vraiment le faire, cependant, vous devriez regarder dans la réflexion en Python (un sujet que je ne connais vraiment rien à ce sujet).
OriginalL'auteur andyg0808
La réponse est: vous ne voulez pas le faire.
Dictionnaires sont conçus pour exactement cet effet: la structure de données que vous fait voulez va être quelque chose comme:
... que vous pouvez ensuite accéder facilement à l'aide par exemple
data["a"]
.C'est possible à faire ce que vous voulez, mais la manière habituelle est un hack qui repose sur le fait que Python utilise (roulement de tambour) un
dict
en interne pour stocker les variables - et depuis votre code ne connais pas le nom de ces variables, vous serez coincé à l'aide du dictionnaire d'accès pour les retrouver ... de sorte que vous pourriez tout aussi bien utiliser un dictionnaire en premier lieu.Il est intéressant de souligner que c'est délibérément rendue difficile en Python, parce que si votre code ne connaissent pas les noms de vos variables, ils sont par définition des données plutôt que de la logique, et doit être traitée comme telle.
Dans le cas où vous n'êtes pas encore convaincu, voici un bon article sur ce sujet:
Stupide Python Idées: Pourquoi vous ne voulez pas créer dynamiquement des variables
Pour multiplier les éléments de la liste dans
data
, vous pouvez utiliser, par exemple,data["a"][0] * data["a"][0]
. En général, vous seriez de parcourir ces listes au lieu d'accéder à un membre individuel, mais c'est vraiment en dehors de la portée de cette question, et un peu trop à expliquer correctement dans un commentaire.Encore une fois, des moyens efficaces pour gérer de gros volumes de données sont en dehors de la portée de cette question - si vous avez une nouvelle question résultant de la réponse à un précédent, vous effectuez une recherche pour voir s'il a déjà été répondu, et si non, à demander séparément.
OriginalL'auteur Zero Piraeus
Grâce à @andyg0808 et @Zéro Pirée, j'ai trouvé une autre solution. Pour moi, le meilleur - à l'aide de Pandas de l'Analyse des Données de la Bibliothèque.
...où 0,1,2,3 sont l'index de ligne.
OriginalL'auteur Michal
Voici un moyen simple de convertir un .txt fichier de noms de variables et les données des tableaux NumPy.
J'aime bien cette méthode, car il est facile à suivre et simple à entretenir. Nous pouvons compact ce code comme suit:
Les deux codes faire la même chose, le retour des tableaux NumPy nommées a,b, et c avec les données qui leur sont associées.
OriginalL'auteur Austin Downey