Utilisation de pandas .append dans la boucle for
Je suis ajoutant des lignes à un pandas DataFrame à l'intérieur d'une boucle for, mais à la fin le dataframe est toujours vide. Je ne veux pas d'ajouter des lignes à un tableau et ensuite appeler le DataFrame constructeur, parce que ma boucle for poignées de beaucoup de données. J'ai aussi essayé pd.concat
sans succès. Quelqu'un pourrait-il mettre en évidence ce que je suis en manque pour faire de l'ajouter déclaration de travaux? Voici un mannequin exemple:
import pandas as pd
import numpy as np
data = pd.DataFrame([])
for i in np.arange(0, 4):
if i % 2 == 0:
data.append(pd.DataFrame({'A': i, 'B': i + 1}, index=[0]), ignore_index=True)
else:
data.append(pd.DataFrame({'A': i}, index=[0]), ignore_index=True)
print data.head()
Empty DataFrame
Columns: []
Index: []
[Finished in 0.676s]
source d'informationauteur chizze
Vous devez vous connecter pour publier un commentaire.
Vous devez définir la variable
data
égale à la annexé bloc de données. Contrairement à laappend
méthode sur une liste python les pandasappend
ne se fait pas en placeChaque fois que vous appelez ajouter, les Pandas renvoie une copie de l'original dataframe et de votre nouvelle ligne. Ceci est appelé quadratique copie, et c'est un O(N^2) opération qui va rapidement devenir très lent (surtout depuis que vous avez beaucoup de données).
Dans votre cas, je vous conseille d'utiliser des listes, en ajoutant à eux, et puis l'appel de la dataframe constructeur.
Timings
Vous pouvez construire votre dataframe sans boucle:
Pour:
C'est un peu plus rapide:
vs