TLDR: 項目を 1 つずつシリーズに追加しないでください。順序付けられたコレクションで拡張することをお勧めします
現在の形式の質問は少しトリッキーだと思います。そして、受け入れられた答えは質問に答えます。しかし、pandas を使えば使うほど、シリーズにアイテムを 1 つずつ追加するのは良くない考えだと理解するようになりました。パンダの初心者向けに理由を説明しようと思います。
特定の Series にデータを追加すると、一部のリソースを再利用できると思うかもしれませんが、実際には、Series はインデックスと値配列の間の関係を格納するコンテナーにすぎません。それぞれがボンネットの下の numpy.array であり、インデックスは不変です。インデックスにないラベルを持つアイテムを Series に追加すると、サイズ n+1 の新しいインデックスが作成され、同じサイズの新しい値の配列が作成されます。つまり、項目を 1 つずつ追加すると、各ステップで n+1 サイズの配列がさらに 2 つ作成されます。
ところで、位置によって新しいアイテムを追加することはできません (IndexError が発生します)。また、インデックスのラベルは一意である必要はありません。この場合、新しい行は追加されません。これにより、微妙なバグが発生する可能性があります。
この話の教訓は、データを 1 つずつ追加するのではなく、順序付けられたコレクションで拡張することです。問題は、シリーズをインプレースで拡張できないことです。そのため、シリーズの特定のインスタンスを参照によって更新する必要がないように、コードを編成する方が適切です。
自分でラベルを作成し、それらが増加している場合、最も簡単な方法は、辞書に新しい項目を追加してから、辞書から新しいシリーズを作成し (キーを並べ替えます)、そのシリーズを古いものに追加することです。キーが増えていない場合は、新しいラベルと新しい値用に 2 つの個別のリストを作成する必要があります。
以下は、いくつかのコード サンプルです。
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)
既存のアイテムを更新すると、インデックスと値の配列は同じままです (値の型を変更しない場合)
In [7]: s[2] = 14
In [8]: id(s.index), id(s.values)
Out[8]: (4470549648, 4470593296)
しかし、新しいアイテムを追加すると、新しいインデックスと新しい値の配列が生成されます。
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)
つまり、複数の項目を追加して辞書に集め、シリーズを作成し、それを古いものに追加して結果を保存する場合です。
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