2009-10-25 4 views
0

J'ai une liste de colonnes que je vais analyser. Au lieu de renvoyer à l'index spécifique tel que data [1] [2], je voudrais attribuer un nom à une colonne, puis faire une boucle sur les lignes des colonnes pour différentes tâches. Comment puis-je attribuer un nom à une colonne, puis est-ce le bon format pour s'y référer?nommez une colonne puis appelez les éléments avec le nom au lieu de l'index

for x in range (len(data)): 
    if [column_name][x] .... 
+0

Est-ce que c'est en Python? Besoin de plus d'infos ... –

+0

Oui, désolé, c'est python. J'essaie d'utiliser les solutions proposées sans avoir de chance. J'ai des erreurs en disant que je ne peux pas indexer avec une chaîne. J'ai du mal à attribuer le nom de la colonne et à le référencer avec succès. Les données proviennent d'un document txt. Ma 2ème colonne est ID, ma troisième colonne est poids et ma 4ème colonne est hauteur. Comment puis-je les nommer et renvoyer? –

Répondre

0

je crois ce que vous voulez dans une variable puis référence faire est de stocker une colonne, au lieu d'utiliser toujours l'indice. Assez simple:

varName=data[columnName] 

Pour en conséquence les accès à cette colonne, varName[rowName] devrait faire l'affaire

2

La meilleure façon d'utiliser des noms plutôt que des entiers pour accéder à vos données est d'utiliser un dictionnaire

data = {'pig':[1, 2], 'cow':[3, 4], 'dog':[5,6]} 

if data in range(2): 
    if data['dog'][1]==4:... 

Il existe également d'autres moyens. Par exemple, vous pouvez créer une classe et remplacer __getitem__; ou vous pouvez simplement affecter des noms de variables aux numéros de colonne dans un tableau 2d, comme dog=2, etc; Tout dépend exactement de ce que vous voulez faire.

3

Il y a plusieurs façons de procéder. Si vous connaissez l'association entre les noms et les colonnes au moment où vous écrivez votre code, la meilleure façon de loin est la suivante:

for row in data: 
    (foo, bar, baz, bat) = row 

... en supposant que vous n'avez pas besoin de mettre à jour row (et data).

Si vous devez mettre à jour la ligne, la copie des valeurs dans les variables ne fonctionnera pas. Vous devez manipuler les éléments via leurs index. Dans ce cas, l'approche de aviraldg est simple:

(foo, bar, baz, bat) = range(4) 
for row in data: 
    row[foo] = row[bar] 

Si vous souhaitez référencer les colonnes par une chaîne qui contient leur nom, vous devez copier la ligne à un dictionnaire dont la clé est le nom de la colonne . Ensuite, lorsque vous avez fini de manipuler le dictionnaire, vous devez mettre à jour la liste d'origine ou la remplacer par une nouvelle (ce que fait ce code):

columns = ("foo", "bar", "baz", "bat") 
for i in range(len(data)): 
    d = dict(zip(columns, data[i])) 
    d["foo"] = d["bar"] 
    data[i] = [d[col] for col in columns] 
Questions connexes