PandasのSeries
は、固定長のラベル付き一次元配列です。
そのため、Pythonのリストのように.append()
メソッドで気軽に要素を追加することはできません。
しかし、いくつかの方法を使えば「Seriesに要素を追加したような新しいSeriesを作る」ことが可能です。
本記事では、その主要な方法と注意点をわかりやすく解説します。
目次
まずは基本:Seriesの定義
import pandas as pd
s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
print(s)
出力
a 10
b 20
c 30
dtype: int64
Seriesに要素を追加する方法3選
pd.concat()
を使う(最も推奨される方法)
new_elem = pd.Series([40], index=['d'])
new_s = pd.concat([s, new_elem])
print(new_s)
出力
a 10
b 20
c 30
d 40
dtype: int64
解説
pd.concat()
は複数のSeries
を連結する関数です。- 非破壊的:元の
s
は変更されません。 - インデックスが重複していなければ、予測可能で安定した動作をします。
- 複数要素を一度に追加するのにも最適です。
インデックスを指定して直接代入する(簡便な方法)
s['d'] = 40
print(s)
出力
a 10
b 20
c 30
d 40
dtype: int64
解説
- 存在しないインデックス
'd'
を指定して値を代入すると、Seriesに新しい要素が追加されます。 - 破壊的操作:元の
s
オブジェクトが直接変更されます。 - 要素の順序は保証されません(Pythonの辞書的な挙動を取ることがあります)。
任意の位置に要素を「挿入」する(疑似的な insert)
Pythonのリストのように.insert()
メソッドは用意されていませんが、次のような手法で「任意の位置に要素を追加」できます。
例:インデックス 'x'
の要素を「2番目の前」に挿入したい
new_elem = pd.Series([15], index=['x'])
# 0番目までの要素 + 追加要素 + 1番目以降の要素を連結
new_s = pd.concat([s.iloc[:1], new_elem, s.iloc[1:]])
print(new_s)
出力
a 10
x 15
b 20
c 30
d 40
dtype: int64
ポイント:
s.iloc[:1]
で最初の1要素(インデックス'a'
)を切り出し。s.iloc[1:]
で残りの部分(インデックス'b'
以降)を切り出し。- このようにして、任意の位置に要素を差し込むことが可能になります。
まとめ:Seriesに要素を追加する方法比較表
方法 | 特徴 | 元のSeriesに影響 | 要素順の制御 | 推奨度 |
---|---|---|---|---|
pd.concat() | 柔軟で高速。複数要素の追加も可 | 非破壊的 | 任意に制御可 | ◎ |
s['new_key'] = value | 簡単・直感的。小規模な追加に便利 | 破壊的 | 順序は保証されない | ○ |
Series.append() | 書きやすいが非推奨(廃止予定) | 非破壊的 | 任意 | × |
iloc + pd.concat() | 特定の位置に挿入したいときに便利 | 非破壊的 | 明確に制御可 | ◎ |
実践ポイント
- 確実性・将来性重視なら
pd.concat()
を使うのがベスト。 - 簡単に済ませたいときは
s['key'] = value
でもOK。 - 順序が重要なら iloc+concat を活用。
以上、PandasのSeriesの要素の追加についてでした。
最後までお読みいただき、ありがとうございました。