0
votes

Pandas - Comment passer la variable comme colonne dans une boucle imbriquée?

J'ai une boucle imbriquée que j'essaie de passer des valeurs d'une liste, mais elle ne reconnaîtra pas la valeur de la liste. Si je remplace la valeur [col] code> avec n'importe quelle valeur de liste comme valeur ['opno'] code> Ça fonctionne. Y a-t-il une enveloppe spécifique ou quelque chose dont j'ai besoin autour des valeurs de la liste ou du code d'affectation?

J'ai essayé les listes comme col_list = ["'Opno'", "" Stationno "", "" Spindle "" , "'Opdescription'"] code> et enveloppant le Col ​​ code> CallOUT comme Valeur [[COL]] code> p>

Le code ci-dessous obtient le code ci-dessous Exception suivante: KeyError: 'OPNO' CODE> P>

row_indexer = 0
col_indexer = 1
iloc_indexer = 0
count_row = operationData.shape[0]
col_list = ['OpNo', 'StationNo', 'Spindle', 'OpDescription']
while row_indexer < count_row:    
    value = operationData.iloc[[row_indexer],[iloc_indexer]]
    for col in col_list:
        value = value[col].values[0]
        wb['OneOpSheet'].cell(row = (row_indexer + 12), column = (col_indexer + 1)).value = value
        col_indexer = (col_indexer + 1)
    row_indexer = (row_indexer + 1)
    iloc_indexer = (iloc_indexer + 1)


2 commentaires

Pouvez-vous fournir un exemple d'une liste d'échantillons ou de DTYPES de OperData? Vous pouvez utiliser opérationData.dtypes pour la liste d'informations. Aussi Row_indexer = (Row_indexer + 1) et des appels similaires peuvent être remplacés par Row_indexer + = 1 .


Je viens de vérifier opérationData.dtypes , chaque colonne est un objet. Et merci pour le conseil + = !


3 Réponses :


0
votes

Je pense valeur = opérationData.iloc [[[Row_indexer], [iLoc_indexer]] renvoie un fichier de données. Essayez valeur = valeur.loc [col] .values ​​[0] .


3 commentaires

Ceci renvoyé keyerror: "L'étiquette [OPNO] n'est pas dans [index]" ", j'ai essayé d'ajouter les valeurs" "autour des valeurs de la liste, mais obtenu la même exception mais avec ['OPNO ']


Dans ce cas, il me semblerait que opérationData.iloc [[Row_indexer], [iLoc_indexer]] renvoie une seule valeur sans clé. Dans ce cas, laisse tomber l'indexeur ILOC et remplacer par OperationData.iloc [[[Row_indexer] ,:] . Je ne suis pas vraiment sûr de la raison pour laquelle vous utilisez un indexeur ILOC en premier lieu.


L'idée était que j'avais un 1 x 4 df que j'ai ensuite tourné vers un 1x1 df à l'aide de valeur = opérationData.iloc [[tiloc_indexer], [iLoc_indexer]] , mais je veux utiliser cette valeur unique non En tant que DF plus tard, d'où la valeur = valeur [col] .values ​​[0] pour capturer la valeur elle-même



2
votes

Je ne sais pas si cela va vous aider exactement, mais peut-être que cela vous mènera dans la bonne direction. Vous pouvez utiliser pandas.dataframe.Itretertuples () pour exécuter toutes les lignes de votre Dataframe, en sélectionnant les valeurs car vous en avez besoin.

Je suis allé un peu plus loin et j'ai créé un dictionnaire d'étiquettes de colonne rapide pour aider à synchroniser les boucles imbriquées.

J'ai essayé de commenter si nécessaire, mais si vous ne comprenez pas quelque chose, laissez-moi savoir! p> xxx pré>

Notre Dataframe: P>

for idx, row in enumerate(data.itertuples(), start = 1):
    for key in col_dict.keys():
        wb['OneOpSheet'].cell(row = (idx + 11), column = (key + 1)).value = data.loc[idx - 1, col_dict[key]]


2 commentaires

Merci pour cela, je ne connais pas d'énumérer ou d'itturalles. J'essaie d'obtenir plus de pythoniques avec mon code mais je reste toujours par défaut de boucler beaucoup de choses. Je pouvais voir comment cela était utile cependant, j'apprécie les efforts.


C'est fantastique. Beaucoup plus élégant que ce que j'ai proposé. Je ne comprends pas complètement l'énumérable avec des intertipultes encore mais cela me donne quelque chose à lire. Merci! Beaucoup mieux que ma solution



0
votes

Je devais avoir les deux commandes à l'intérieur du pour en boucle et réinitialiser quelques indexateurs après cette fin. La boucle imbriquée ci-dessous accomplit ce dont j'avais besoin: xxx


1 commentaires

Voir mon commentaire édité. J'ai pdé le dictionnaire et l'indexation pour accueillir des cellules Excel, mais si vous exécutez la fonction, il imprimera chaque ligne, colonne et la valeur de cellule pour aider à visualiser la sortie et mieux optimiser votre script.