PythonのPandasライブラリでは、Series
オブジェクトを結合する方法がいくつかあります。
用途に応じて使い分けることが重要です。
以下では、基本的な結合方法から、インデックスやデータの整合性に配慮した高度な方法まで、詳しく解説します。
目次
そもそもSeriesとは?
Series
はPandasの基本的なデータ構造のひとつで、1次元のラベル付き配列です。
例えば
import pandas as pd
s1 = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
print(s1)
a 10
b 20
c 30
dtype: int64
結合(連結・マージ)の方法まとめ
方法 | 概要 | 例 |
---|---|---|
pd.concat() | Series同士を縦や横に結合する汎用的な関数 | 複数Seriesをまとめる |
append() | pd.concat の簡易版(非推奨・v2.0以降廃止) | s1.append(s2) |
combine_first() | 片方の欠損値をもう片方の値で補完 | 補完やマージに便利 |
add() , sub() , mul() など | 要素ごとの算術結合(インデックスに依存) | s1 + s2 でも可 |
join() | データフレームのような方法でSeries同士を結合 | 通常はDataFrame向け |
pd.concat()
によるSeriesの結合(基本)
縦に結合(デフォルト)
s1 = pd.Series([1, 2], index=['a', 'b'])
s2 = pd.Series([3, 4], index=['c', 'd'])
result = pd.concat([s1, s2])
print(result)
a 1
b 2
c 3
d 4
dtype: int64
複数のSeriesを一つのSeriesとして“縦に”つなぎます。
横に結合(DataFrameになる)
result = pd.concat([s1, s2], axis=1)
print(result)
0 1
a 1.0 NaN
b 2.0 NaN
c NaN 3.0
d NaN 4.0
axis=1
を指定すると列方向に結合され、DataFrameになります。インデックスが自動で揃えられます。
combine_first()
による結合(補完的マージ)
s1 = pd.Series([1, None, 3], index=['a', 'b', 'c'])
s2 = pd.Series([10, 20, 30], index=['b', 'c', 'd'])
result = s1.combine_first(s2)
print(result)
a 1.0
b 10.0
c 3.0
d 30.0
dtype: float64
s1
の値が優先され、NaN
の部分にs2
の値が補完されます。
欠損補完やマージに便利な方法です。
要素ごとの算術的な結合
s1 = pd.Series([1, 2, 3], index=['a', 'b', 'c'])
s2 = pd.Series([4, 5, 6], index=['b', 'c', 'd'])
result = s1 + s2
print(result)
a NaN
b 6.0
c 8.0
d NaN
dtype: float64
同じインデックス同士の値だけが計算され、それ以外は
NaN
になります。
他にも .add()
, .sub()
, .mul()
, .div()
といったメソッドがあります。
s1.add(s2, fill_value=0)
これは、NaN
の代わりに 0
を使って計算する例です。
SeriesをDataFrameとして結合する方法(応用)
df = pd.concat([s1, s2], axis=1)
df.columns = ['S1', 'S2']
print(df)
S1 S2
a 1.0 NaN
b 2.0 4.0
c 3.0 5.0
d NaN 6.0
よくあるエラーと注意点
状況 | エラー・問題 | 解決法 |
---|---|---|
インデックスが重複している | 結果に重複が生じる | ignore_index=True を使うか、ユニークにする |
axis=1 で結合したのに期待と違う | Seriesが列として扱われる | DataFrame 化を意識すること |
まとめ
方法 | 用途 | 特徴 |
---|---|---|
pd.concat() | 複数Seriesの結合 | 最も汎用的・おすすめ |
combine_first() | 補完付きのマージ | 欠損データの補完に最適 |
s1 + s2 | 要素同士の演算 | インデックスで整合性を取る |
append() | 簡易結合(非推奨) | concat を使うべき |
以上、PythonのPandasのseriesの結合についてでした。
最後までお読みいただき、ありがとうございました。