Pandas DataFrameとSeriesを相互変換!データ操作の基本をマスター 🔄


 

Pandasを使いこなす上で避けて通れないのが、DataFrameSeriesという2つの主要なデータ構造です。これらは密接に関連しており、状況に応じて相互に変換するテクニックは、データ前処理や分析を効率的に進める上で非常に重要になります。

この記事では、DataFrameSeriesがそれぞれどのような構造をしているかを確認し、両者をスムーズに相互変換する方法を、具体的なコード例を交えながら詳しく解説します。


 

Pandas DataFrameとSeriesのおさらい 📚

 

相互変換の前に、まずはDataFrameSeriesの基本をおさらいしましょう。

 

DataFrame:表形式データ構造の王者 👑

 

DataFrameは、複数の列と行を持つ2次元の表形式データ構造です。Excelシートやリレーショナルデータベースのテーブルに似ており、様々なデータ型を格納できます。各列には名前(カラム名)が、各行にはインデックスが付与されています。

Python
 
import pandas as pd

# DataFrameの例
df = pd.DataFrame({
    '名前': ['Alice', 'Bob'],
    '年齢': [25, 30]
})
print("--- DataFrame ---")
print(df)
# 出力例:
#     名前  年齢
# 0  Alice  25
# 1    Bob  30

 

Series:1次元データ構造の基本 📏

 

Seriesは、DataFrameの1つの列に相当する1次元の配列ライクなデータ構造です。各要素にはインデックスが付与されています。

Python
 
import pandas as pd

# Seriesの例
s = pd.Series([10, 20, 30], name='売上')
print("\n--- Series ---")
print(s)
# 出力例:
# 0    10
# 1    20
# 2    30
# Name: 売上, dtype: int64

 

DataFrame ➡️ Seriesへの変換方法 ⬇️

 

DataFrameからSeriesへの変換は、主にDataFrameから単一の列を選択する際に行われます。

 

1. 単一列を選択する

 

DataFrameから1つの列を選択すると、その結果はSeriesとして返されます。これは最も一般的で簡単な変換方法です。

Python
 
import pandas as pd

df = pd.DataFrame({
    '名前': ['Alice', 'Bob', 'Charlie'],
    '年齢': [25, 30, 35]
})

# '名前'列をSeriesとして選択
s_name = df['名前']
print("--- DataFrameの1列をSeriesに変換 ---")
print(s_name)
print(f"型: {type(s_name)}")
# 出力例:
# 0      Alice
# 1        Bob
# 2    Charlie
# Name: 名前, dtype: object
# 型: <class 'pandas.core.series.Series'>

 

2. .squeeze()メソッドを使用する

 

DataFrame1つの列または1つの行しか持たない場合、.squeeze()メソッドを使用すると、そのDataFrameSeriesに変換できます。

Python
 
import pandas as pd

df_single_col = pd.DataFrame({'人数': [100, 150, 200]})

# 1列のDataFrameをSeriesに変換
s_squeezed = df_single_col.squeeze()
print("\n--- .squeeze() で1列DataFrameをSeriesに変換 ---")
print(s_squeezed)
print(f"型: {type(s_squeezed)}")
# 出力例:
# 0    100
# 1    150
# 2    200
# Name: 人数, dtype: int64
# 型: <class 'pandas.core.series.Series'>

 

Series ➡️ DataFrameへの変換方法 ⬆️

 

SeriesDataFrameに変換する方法はいくつかあり、どのようなDataFrameを作成したいかによって使い分けます。

 

1. Seriesを直接DataFrame()コンストラクタに渡す

 

最もシンプルで、Seriesを1列のDataFrameとして変換する方法です。Seriesの名前がそのまま列名になります。

Python
 
import pandas as pd

s = pd.Series([10, 20, 30], name='売上')

# SeriesをDataFrameに変換
df_from_s = pd.DataFrame(s)
print("--- SeriesをDataFrameに変換 (1列) ---")
print(df_from_s)
# 出力例:
#    売上
# 0  10
# 1  20
# 2  30

 

2. Seriesを複数結合してDataFrameを作成する

 

複数のSeriesを辞書形式でDataFrameコンストラクタに渡すことで、それぞれのSeriesDataFrameの列になります。

Python
 
import pandas as pd

s_names = pd.Series(['Alice', 'Bob'], name='名前')
s_ages = pd.Series([25, 30], name='年齢')

# 複数のSeriesを結合してDataFrameを作成
df_combined = pd.DataFrame({'氏名': s_names, '年齢': s_ages})
print("\n--- 複数のSeriesを結合してDataFrameを作成 ---")
print(df_combined)
# 出力例:
#      氏名  年齢
# 0  Alice  25
# 1    Bob  30

 

3. Seriesを転置して1行のDataFrameにする

 

もしSeriesを1行のDataFrameにしたい場合は、一度DataFrameに変換した後に転置(.T)します。

Python
 
import pandas as pd

s_data = pd.Series({'製品A': 100, '製品B': 200, '製品C': 300}, name='数量')

# SeriesをDataFrameに変換し、転置
df_single_row = pd.DataFrame(s_data).T
print("\n--- Seriesを転置して1行のDataFrameに変換 ---")
print(df_single_row)
# 出力例:
#        製品A  製品B  製品C
# 数量  100  200  300

 

まとめ

 

PandasのDataFrameSeriesは、データ分析において車の両輪のような存在です。両者の特徴を理解し、状況に応じて適切に相互変換するスキルは、データ操作の幅を広げ、より柔軟な分析を可能にします。

  • DataFrameからSeriesへは、単一列の選択や**.squeeze()**を使う。

  • SeriesからDataFrameへは、**pd.DataFrame(series)**で1列のDataFrameに、複数のSeriesを辞書で渡したり、転置したりすることで柔軟に作成できる。

これらの変換テクニックをマスターして、あなたのPandasスキルを次のレベルへ引き上げましょう!