TLDR : n'ajoutez pas les éléments à une série un par un, il est préférable d'utiliser une collection ordonnée.
Je pense que la question, dans sa forme actuelle, est un peu délicate. Et la réponse acceptée répond effectivement à la question. Mais plus j'utilise les pandas, plus je comprends que c'est une mauvaise idée d'ajouter des éléments à une série un par un. Je vais essayer d'expliquer pourquoi aux débutants en pandas.
Vous pourriez penser que l'ajout de données à une série donnée pourrait vous permettre de réutiliser certaines ressources, mais en réalité, une série n'est qu'un conteneur qui stocke une relation entre un index et un tableau de valeurs. Chaque tableau est un numpy.array, et l'index est immuable. Lorsque vous ajoutez à Series un élément dont l'étiquette est manquante dans l'index, un nouvel index de taille n+1 est créé, et un nouveau tableau de valeurs de la même taille. Cela signifie que lorsque vous ajoutez des éléments un par un, vous créez deux tableaux supplémentaires de taille n+1 à chaque étape.
Par ailleurs, vous ne pouvez pas ajouter un nouvel élément par position (vous obtiendrez une IndexError) et l'étiquette dans un index ne doit pas être unique, c'est-à-dire que lorsque vous attribuez une valeur avec une étiquette, vous attribuez la valeur à tous les éléments existants avec l'étiquette, et une nouvelle ligne n'est pas ajoutée dans ce cas. Cela peut entraîner des bogues subtils.
La morale de l'histoire est que vous ne devriez pas ajouter les données une par une, mais plutôt les étendre avec une collection ordonnée. Le problème est que vous ne pouvez pas étendre une série in situ. C'est pourquoi il est préférable d'organiser votre code de manière à ne pas avoir à mettre à jour une instance spécifique d'une série par référence.
Si vous créez vous-même les étiquettes et qu'elles augmentent, le plus simple est d'ajouter de nouveaux éléments à un dictionnaire, puis de créer une nouvelle série à partir du dictionnaire (il trie les clés) et d'ajouter la série à une ancienne. Si les clés ne sont pas croissantes, vous devrez créer deux listes distinctes pour les nouvelles étiquettes et les nouvelles valeurs.
Vous trouverez ci-dessous quelques exemples de code :
In [1]: import pandas as pd
In [2]: import numpy as np
In [3]: s = pd.Series(np.arange(4)**2, index=np.arange(4))
In [4]: s
Out[4]:
0 0
1 1
2 4
3 9
dtype: int64
In [6]: id(s.index), id(s.values)
Out[6]: (4470549648, 4470593296)
Lorsque nous mettons à jour un élément existant, l'index et le tableau des valeurs restent les mêmes (si vous ne changez pas le type de la valeur).
In [7]: s[2] = 14
In [8]: id(s.index), id(s.values)
Out[8]: (4470549648, 4470593296)
Mais lorsque vous ajoutez un nouvel élément, un nouvel index et un nouveau tableau de valeurs sont générés :
In [9]: s[4] = 16
In [10]: s
Out[10]:
0 0
1 1
2 14
3 9
4 16
dtype: int64
In [11]: id(s.index), id(s.values)
Out[11]: (4470548560, 4470595056)
En d'autres termes, si vous voulez ajouter plusieurs éléments, rassemblez-les dans un dictionnaire, créez une série, ajoutez-la à l'ancienne et enregistrez le résultat :
In [13]: new_items = {item: item**2 for item in range(5, 7)}
In [14]: s2 = pd.Series(new_items)
In [15]: s2 # keys are guaranteed to be sorted!
Out[15]:
5 25
6 36
dtype: int64
In [16]: s = s.append(s2); s
Out[16]:
0 0
1 1
2 14
3 9
4 16
5 25
6 36
dtype: int64