<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>「outer」タグの記事一覧Python Tech</title>
	<atom:link href="https://tech.nkhn37.net/tag/outer/feed/" rel="self" type="application/rss+xml" />
	<link>https://tech.nkhn37.net</link>
	<description>Python学習サイト</description>
	<lastBuildDate>Sun, 11 Jan 2026 08:30:39 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://tech.nkhn37.net/wp-content/uploads/2021/01/cropped-lion-normal-clear-1-32x32.png</url>
	<title>「outer」タグの記事一覧Python Tech</title>
	<link>https://tech.nkhn37.net</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【pandas】SeriesやDataFrameを連結する方法 ~ concat ~</title>
		<link>https://tech.nkhn37.net/pandas-dataframe-concat/</link>
					<comments>https://tech.nkhn37.net/pandas-dataframe-concat/#respond</comments>
		
		<dc:creator><![CDATA[naoki-hn]]></dc:creator>
		<pubDate>Fri, 18 Mar 2022 20:00:00 +0000</pubDate>
				<category><![CDATA[pandas]]></category>
		<category><![CDATA[append]]></category>
		<category><![CDATA[concat]]></category>
		<category><![CDATA[ignore_index]]></category>
		<category><![CDATA[inner]]></category>
		<category><![CDATA[join]]></category>
		<category><![CDATA[keys]]></category>
		<category><![CDATA[merge]]></category>
		<category><![CDATA[outer]]></category>
		<category><![CDATA[verify_integrity]]></category>
		<guid isPermaLink="false">https://tech.nkhn37.net/?p=3154</guid>

					<description><![CDATA[pandasのSeriesやDataFrameを連結する方法について解説します。 SeriesやDataFrameの連結方法 データ分析の際には、異なる種類のデータソースの組み合わせから深い知見や研究成果が得られるという [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">pandasの<span class="marker"><strong>Seriesや</strong></span><span class="marker"><strong>DataFrameを連結する方法</strong></span>について解説します。</p>



<h2 class="wp-block-heading jinr-heading d--bold">SeriesやDataFrameの連結方法</h2>



<p class="wp-block-paragraph">データ分析の際には、異なる種類のデータソースの組み合わせから深い知見や研究成果が得られるということがほとんどです。ここでいう「組み合わせ」とは2つのデータセットを単に連結するだけではなく、重複するデータを適切に処理することも含まれます。</p>



<p class="wp-block-paragraph">pandasで中心的なデータ構造はSeriesやDataFrameです。これらは連結処理を念頭に置いて設計されているため、データを簡単に連結することができます。具体的には、pandasのSeriesやDataFrameを連結したい場合、<span class="marker"><strong><code>concat</code></strong></span>関数を使用することができます。</p>



<p class="wp-block-paragraph">この記事では、pandasの<code>concat</code>関数を用いたデータの連結方法を説明します。</p>



<h4 class="wp-block-heading jinr-heading d--bold">concat関数の基本的な使い方</h4>



<p class="wp-block-paragraph">SeriesやDataFrameを連結する場合には<span class="marker"><strong><code>concat</code></strong></span>関数を使用します。以下の簡単な例を見てみましょう。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import pandas as pd

# ===== Seriesの連結
# データの準備
ser1 = pd.Series(['A', 'B', 'C', 'D', 'E'], index=[1, 2, 3, 4, 5])
ser2 = pd.Series(['V', 'W', 'X', 'Y', 'Z'], index=[6, 7, 8, 9, 10])

# 連結
ser_concat = pd.concat([ser1, ser2])
print(ser_concat, '\n')

# ===== DataFrameの連結
# データの準備
df1 = pd.DataFrame([['A', 'B'], ['C', 'D'], ['E', 'F']],
                   index=[1, 2, 3], columns=['attr1', 'attr2'])
df2 = pd.DataFrame([['U', 'V'], ['W', 'X'], ['Y', 'Z']],
                   index=[4, 5, 6], columns=['attr1', 'attr2'])

# 連結
df_concat = pd.concat([df1, df2])
print(df_concat)</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
1     A
2     B
3     C
4     D
5     E
6     V
7     W
8     X
9     Y
10    Z
dtype: object 

  attr1 attr2
1     A     B
2     C     D
3     E     F
4     U     V
5     W     X
6     Y     Z</pre>



<p class="wp-block-paragraph">上記では、SeriesとDataFrameをそれぞれ連結をしています。使用方法は簡単で、<code>concat</code>関数の引数に連結したい対象のSeriesやDataFrameを含むリストを指定するだけです。</p>



<h4 class="wp-block-heading jinr-heading d--bold">インデックスが重複している場合</h4>



<p class="wp-block-paragraph"><code>concat</code>関数の特徴として、連結するデータのインデックスが重複していても、それぞれのインデックスが保持される点があります。以下は、インデックス2, 3が重複しているケースです。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import pandas as pd

# ===== DataFrameの連結
# データの準備
df1 = pd.DataFrame([['A', 'B'], ['C', 'D'], ['E', 'F']],
                   index=[1, 2, 3], columns=['attr1', 'attr2'])
df2 = pd.DataFrame([['U', 'V'], ['W', 'X'], ['Y', 'Z']],
                   index=[2, 3, 4], columns=['attr1', 'attr2'])

# 連結 (インデックスが重複していても保持する)
df_concat = pd.concat([df1, df2])
print(df_concat)</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
  attr1 attr2
1     A     B
2     C     D
3     E     F
2     U     V
3     W     X
4     Y     Z</pre>



<p class="wp-block-paragraph">上記結果を見ると、インデックス2, 3が複数回出現していることが分かります。</p>



<p class="wp-block-paragraph">このような状況でも問題がなければそのままで構いません。もし、重複が問題になる場合は、後述する<code>verify_integrity</code>や<code>ignore_index</code>を使った対処法があります。</p>



<h4 class="wp-block-heading jinr-heading d--bold">重複がある場合に例外を出す ~ verify_integrity ~</h4>



<p class="wp-block-paragraph"><code>concat</code>関数は、インデックスが重複していても保持します。インデックスの重複が問題になる場合、重複があることを例外として出して対処する方法があります。</p>



<p class="wp-block-paragraph">重複した場合に例外を出すには、以下のように<span class="marker"><strong><code>verify_integrity</code></strong></span>を<code>True</code>に設定します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import pandas as pd

# ===== DataFrameの連結
df1 = pd.DataFrame([['A', 'B'], ['C', 'D'], ['E', 'F']],
                   index=[1, 2, 3], columns=['attr1', 'attr2'])
df2 = pd.DataFrame([['U', 'V'], ['W', 'X'], ['Y', 'Z']],
                   index=[2, 3, 4], columns=['attr1', 'attr2'])

# 連結 (インデックス重複時は例外:ValueError)
try:
    df_concat = pd.concat([df1, df2], verify_integrity=True)
    print(df_concat)
except ValueError as ex:
    print(ex)</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
Indexes have overlapping values: Int64Index([2, 3], dtype='int64')</pre>



<p class="wp-block-paragraph"><code>verify_integrity</code>を<code>True</code>に設定すると、インデックスが重複していた場合には、<code>ValueError</code>の例外が発生します。この例外をキャッチすることで、処理を変更することが可能です。</p>



<h4 class="wp-block-heading jinr-heading d--bold">インデックスを無視する ~ ignore_index ~</h4>



<p class="wp-block-paragraph">インデックスが重複しているケースで、もともとのインデックスが意味を持たない場合は、インデックスを無視して新しいインデックスを振ることが可能です。</p>



<p class="wp-block-paragraph">インデックスを無視して新しいインデックスを振るには、以下のように<span class="marker"><strong><code>ignore_index</code></strong></span>をTrueに設定します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import pandas as pd

# ===== DataFrameの連結
df1 = pd.DataFrame([['A', 'B'], ['C', 'D'], ['E', 'F']],
                   index=[1, 2, 3], columns=['attr1', 'attr2'])
df2 = pd.DataFrame([['U', 'V'], ['W', 'X'], ['Y', 'Z']],
                   index=[2, 3, 4], columns=['attr1', 'attr2'])

# 連結 (インデックスを無視する)
df_concat = pd.concat([df1, df2], ignore_index=True)
print(df_concat)</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
  attr1 attr2
0     A     B
1     C     D
2     E     F
3     U     V
4     W     X
5     Y     Z</pre>



<p class="wp-block-paragraph">上記結果から、もともとのインデックスが無視され、新しいインデックスが0から設定されてデータが結合されていることが分かります。</p>



<h4 class="wp-block-heading jinr-heading d--bold">連結するデータにキーを指定して階層型インデックス（マルチインデックス）にする ~ keys ~</h4>



<p class="wp-block-paragraph">データを連結する際に、元のデータのキーを残して結合したい場合は、階層型インデックス（マルチインデックス）を使用して対応することができます。階層型インデックスにするには、以下のように<span class="marker"><strong><code>keys</code></strong></span>で各データのキー情報を指定します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import pandas as pd

# ===== DataFrameの連結
# データの準備
df1 = pd.DataFrame([['A', 'B'], ['C', 'D'], ['E', 'F']],
                   index=[1, 2, 3], columns=['attr1', 'attr2'])
df2 = pd.DataFrame([['U', 'V'], ['W', 'X'], ['Y', 'Z']],
                   index=[2, 3, 4], columns=['attr1', 'attr2'])

# 連結 (階層型のインデックスにする)
df_concat = pd.concat([df1, df2], keys=['D1', 'D2'])
print(df_concat)</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
     attr1 attr2
D1 1     A     B
   2     C     D
   3     E     F
D2 2     U     V
   3     W     X
   4     Y     Z</pre>



<p class="wp-block-paragraph">上記の例では<code>"D1"</code>、<code>"D2"</code>を指定しています。結果として、それぞれのキーの下に元のデータのインデックスが階層型インデックスとして配置され、データが連結されています。</p>



<h4 class="wp-block-heading jinr-heading d--bold">積集合での連結 ~ join=&#8221;inner&#8221; ~</h4>



<p class="wp-block-paragraph">上記で見てきた例では、列名が全く同じデータを連結してきました。では、列名が異なるデータを連結する場合はどうなるでしょうか。以下の例で見てみましょう。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import pandas as pd

# ===== DataFrameの連結
df1 = pd.DataFrame([['A', 'B'], ['C', 'D'], ['E', 'F']],
                   index=[1, 2, 3], columns=['attr1', 'attr2'])
df2 = pd.DataFrame([['U', 'V'], ['W', 'X'], ['Y', 'Z']],
                   index=[4, 5, 6], columns=['attr2', 'attr3'])

# 連結 (デフォルトはjoin='outer')
df_concat = pd.concat([df1, df2])
print(df_concat, '\n')

# 連結 (join='inner')
df_concat = pd.concat([df1, df2], join='inner')
print(df_concat)</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
  attr1 attr2 attr3
1     A     B   NaN
2     C     D   NaN
3     E     F   NaN
4   NaN     U     V
5   NaN     W     X
6   NaN     Y     Z 

  attr2
1     B
2     D
3     F
4     U
5     W
6     Y</pre>



<p class="wp-block-paragraph">concat関数は、デフォルトでは<span class="marker"><strong><code>join="outer"</code></strong></span>となっています。<code>outer</code>は和集合を意味し、両方の列を含んだ連結が行われ、値がない部分は上記結果のように<code>NaN</code>となります。</p>



<p class="wp-block-paragraph">もし、それぞれのデータセットに存在する列のみを連結したい場合は、<span class="marker"><strong><code>join="inner"</code></strong></span>を指定します。これにより積集合としての連結が行われます。上記結果を見ると、<code>join="inner"</code>を指定した場合は、両方に存在する<code>"attr2"</code>列のみ連結したデータが得られていることが分かります。</p>



<section class="wp-block-jinr-blocks-iconbox b--jinr-block b--jinr-iconbox"><div class="d--simple-iconbox6 ">
			<i class="jif jin-ifont-v2books" aria-hidden="true"></i>
			<div class="a--jinr-iconbox">
<p class="wp-block-paragraph"><code>concat</code> 関数の公式ドキュメントは<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.concat.html" target="_blank" rel="noreferrer noopener">こちら</a>を参照してください。</p>
</div>
		</div></section>



<h3 class="wp-block-heading jinr-heading d--bold">appendメソッドによるデータ連結【非推奨】</h3>



<section class="wp-block-jinr-blocks-iconbox b--jinr-block b--jinr-iconbox"><div class="d--heading-iconbox1 ">
			<div class="a--heading-iconbox-title">
			<div class="a--iconbox-title-icon"><i class="jif jin-ifont-caution" aria-hidden="true"></i></div>
			<div class="a--iconbox-title-text">注意点</div>
			</div>
			<div class="a--jinr-iconbox">
<p class="wp-block-paragraph"><code>append</code> メソッドは、1.4.0から非推奨になっており、将来的には pandas から削除される予定です。バージョンによっては <code>concat</code> 関数を使用するよう警告が表示される場合があります。</p>



<p class="wp-block-paragraph"><code>append</code> メソッドは使用可能な場合であっても、データ連結の際は <code>concat</code> 関数の使用を推奨します。</p>
</div>
		</div></section>



<h2 class="wp-block-heading jinr-heading d--bold">その他のデータの結合方法（merge, join）</h2>



<p class="wp-block-paragraph">上記では、<code>concat</code>関数を用いた連結方法について紹介しました。pandasには、他にも<span class="marker"><strong><code>merge</code></strong></span>関数や<span class="marker"><strong><code>join</code></strong></span>メソッドという強力なデータ結合方法があります。</p>



<p class="wp-block-paragraph">データベースのSQLに慣れている人にとっては、<code>merge</code>関数や<code>join</code>メソッドが理解しやすいかもしれません。これらの使用方法については「<a href="https://tech.nkhn37.net/pandas-dataframe-merge-join/" target="_blank" rel="noreferrer noopener">DataFrameを結合する方法</a>」でまとめていますので興味があれば参考にしてください。</p>



<h2 class="wp-block-heading jinr-heading d--bold">まとめ</h2>



<p class="wp-block-paragraph">pandasのSeriesやDataFrameを連結する方法について解説しました。具体的には、<span class="marker"><strong><code>concat</code></strong></span>関数によるデータ連結方法について説明しました。</p>



<p class="wp-block-paragraph">データ分析では、単にデータを連結するだけではなく、重複するデータの適切な処理や、連結時に元のデータを保持しながら階層型インデックス（マルチインデックス）を作成する方法、さらに<code>outer</code>や<code>inner</code>結合を使い分けることが重要です。これらについて本記事で紹介しました。</p>



<p class="wp-block-paragraph">データ分析においては、複数のデータソースを適切に結合してから分析を行うことで、有益な情報を抽出できます。<code>concat</code>関数を利用したデータ結合に慣れることは重要です。</p>



<section class="wp-block-jinr-blocks-simplebox b--jinr-block-container"><div class="b--jinr-block b--jinr-box d--heading-box8  "><div class="a--simple-box-title d--bold">ソースコード</div><div class="c--simple-box-inner">
<p class="wp-block-paragraph">上記で紹介しているソースコードについては <a href="https://github.com/nkhn37/python-tech-sample-source/tree/main/python-data-analysis/pandas/concat" target="_blank" rel="noreferrer noopener">GitHub</a> にて公開しています。参考にしていただければと思います。</p>
</div></div></section>


<section class="b--jinr-block b--jinr-blogcard d--blogcard-hover-up d--blogcard-style1 d--blogcard-mysite t--round "><div class="a--blogcard-label ef">あわせて読みたい</div><a class="o--blogcard-link t--round" href="https://tech.nkhn37.net/python-tech-summary-page/"><div class="c--blogcard-image"><img decoding="async" class="a--blogcard-img-src" width="128" height="72" src="https://tech.nkhn37.net/wp-content/uploads/2024/08/Python-Tech-Pythonプログラミングガイド_new1-640x360.jpg" alt="【Python Tech】プログラミングガイド" /></div><div class="a--blogcard-title d--bold">【Python Tech】プログラミングガイド</div></a></section>

]]></content:encoded>
					
					<wfw:commentRss>https://tech.nkhn37.net/pandas-dataframe-concat/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Disk: Enhanced  を使用したページ キャッシュ

Served from: tech.nkhn37.net @ 2026-06-14 22:52:55 by W3 Total Cache
-->