J'ai découvert un bogue très subtil dans mon code. Je supprime fréquemment des lignes d'une base de données dans mon analyse. Parce que cela laissera des lacunes dans l'index, je tente de mettre fin à toutes les fonctions en remettant à zéro l'index à la fin avecQuand réinitialiser l'index? loc vs iloc pour les lacunes dans l'index? Les meilleures pratiques?
df0 = df0.reset_index (drop = True)
Alors je continue dans la fonction suivante avec
for row in xrange (df0.shape [0]):
print df0.loc [row]
print df0.iloc [row]
Cependant, si je ne réinitialiser l'index correctement, la première ligne peut avoir un index de 192. L'index de 192 n'est pas le même que le numéro de ligne de 0. Cela conduit au problème que df0.loc [ligne] accède à la ligne avec l'index 0, et df0.iloc [row] accède à la ligne avec l'index 192. Cela a provoqué un bug très étrange, en ce sens que j'essaye de mettre à jour la ligne 0, mais l'index 192 est mis à jour à la place. Ou vice versa.
Mais en réalité, je n'utilise aucune fonction df0.loc() ou df0.iloc() car elles sont trop lentes. Mon code est criblé de fonctions df0.get_value (...) et df0.set_value (...) car ce sont les fonctions les plus rapides lors de l'accès aux valeurs.
Et il semble que certaines fonctions sont accessibles par index, et d'autres sont accessibles par des numéros de ligne? Je suis confus. Quelqu'un peut-il m'expliquer? Quelles sont les meilleures pratiques? Certaines fonctions utilisent-elles l'index pour accéder aux valeurs, tandis que d'autres utilisent des numéros de lignes? Ai-je mal compris quelque chose? Dois-je toujours reset_index() aussi souvent que je peux? Ou ne fais jamais ça?
EDIT: Pour récapituler: Je fusionne manuellement certaines lignes dans les fonctions afin qu'il y ait des espaces dans les indications. Dans d'autres fonctions, je parcoure chaque rangée et fais des calculs. Cependant, si j'ai réinitialisé l'index, j'obtiens d'autres résultats de calcul que si je ne réinitialise pas l'index. Pourquoi? C'est mon problème.
iloc devrait fonctionner quelles que soient les étiquettes d'index. Iloc (emplacement entier) récupérera les lignes en fonction de leur emplacement d'entier dans l'index. –