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 J'ai essayé les listes comme Le code ci-dessous obtient le code ci-dessous Exception suivante: [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? col_list = ["'Opno'", "" Stationno "", "" Spindle "" , "'Opdescription'"] code> et enveloppant le Col code> CallOUT comme Valeur [[COL]] code> p> 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)
3 Réponses :
Je pense valeur = opérationData.iloc [[[Row_indexer], [iLoc_indexer]] code> renvoie un fichier de données. Essayez valeur = valeur.loc [col] .values [0] code>. p>
Ceci renvoyé keyerror: "L'étiquette [OPNO] n'est pas dans [index]" " code>, j'ai essayé d'ajouter les valeurs" "autour des valeurs de la liste, mais obtenu la même exception mais avec ['OPNO '] code>
Dans ce cas, il me semblerait que opérationData.iloc [[Row_indexer], [iLoc_indexer]] code> renvoie une seule valeur sans clé. Dans ce cas, laisse tomber l'indexeur ILOC et remplacer par OperationData.iloc [[[Row_indexer] ,:] code>. 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]] code>, mais je veux utiliser cette valeur unique non En tant que DF plus tard, d'où la valeur = valeur [col] .values [0] code> pour capturer la valeur elle-même
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> 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]]
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
Je devais avoir les deux commandes à l'intérieur du pour code> en boucle et réinitialiser quelques indexateurs après cette fin. La boucle imbriquée ci-dessous accomplit ce dont j'avais besoin:
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.
Pouvez-vous fournir un exemple d'une liste d'échantillons ou de DTYPES de OperData? Vous pouvez utiliser
opérationData.dtypes code> pour la liste d'informations. AussiRow_indexer = (Row_indexer + 1) Code> et des appels similaires peuvent être remplacés parRow_indexer + = 1 code>.Je viens de vérifier
opérationData.dtypes code>, chaque colonne est un objet. Et merci pour le conseil+ = code>!