Pandas DataFrameとSeriesを相互変換!データ操作の基本をマスター 🔄
Pandasを使いこなす上で避けて通れないのが、DataFrameとSeriesという2つの主要なデータ構造です。これらは密接に関連しており、状況に応じて相互に変換するテクニックは、データ前処理や分析を効率的に進める上で非常に重要になります。
この記事では、DataFrame
とSeries
がそれぞれどのような構造をしているかを確認し、両者をスムーズに相互変換する方法を、具体的なコード例を交えながら詳しく解説します。
Pandas DataFrameとSeriesのおさらい 📚
相互変換の前に、まずはDataFrame
とSeries
の基本をおさらいしましょう。
DataFrame:表形式データ構造の王者 👑
DataFrame
は、複数の列と行を持つ2次元の表形式データ構造です。Excelシートやリレーショナルデータベースのテーブルに似ており、様々なデータ型を格納できます。各列には名前(カラム名)が、各行にはインデックスが付与されています。
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次元の配列ライクなデータ構造です。各要素にはインデックスが付与されています。
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
として返されます。これは最も一般的で簡単な変換方法です。
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()
メソッドを使用する
DataFrame
が1つの列または1つの行しか持たない場合、.squeeze()
メソッドを使用すると、そのDataFrame
をSeries
に変換できます。
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への変換方法 ⬆️
Series
をDataFrame
に変換する方法はいくつかあり、どのようなDataFrame
を作成したいかによって使い分けます。
1. Series
を直接DataFrame()
コンストラクタに渡す
最もシンプルで、Series
を1列のDataFrame
として変換する方法です。Series
の名前がそのまま列名になります。
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
コンストラクタに渡すことで、それぞれのSeries
がDataFrame
の列になります。
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
)します。
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のDataFrame
とSeries
は、データ分析において車の両輪のような存在です。両者の特徴を理解し、状況に応じて適切に相互変換するスキルは、データ操作の幅を広げ、より柔軟な分析を可能にします。
DataFrame
からSeries
へは、単一列の選択や**.squeeze()
**を使う。Series
からDataFrame
へは、**pd.DataFrame(series)
**で1列のDataFrameに、複数のSeriesを辞書で渡したり、転置したりすることで柔軟に作成できる。
これらの変換テクニックをマスターして、あなたのPandasスキルを次のレベルへ引き上げましょう!