Pandas: 【DataFrame】データフレームの基本構造と作成方法【Pandas入門】

最終更新:2026-08-26

DataFrameはPandasの中核となるデータ構造です。ラベル付きの2次元テーブルで、各列は独自のdtypeと名前を持つSeriesです。DataFrameはコード上のExcelシートやSQLテーブルのようなものですが、より強力です。プログラムで操作でき、拡張可能で、バージョン管理もできます。このセクションでは、DataFrameの基本的な構造を深く学んでいきましょう。

⚠️ 注意: 以下のコードにはローカルのPython環境が必要です。

1. このセクションで学ぶこと



2. チャーリーのECサイト商品テーブル

(1) 課題:複数の列をまとめて管理したい

チャーリーはECサイトを運営しており、商品データを管理する必要があります。商品名、カテゴリ、価格、在庫数、評価の5つの列があり、それぞれ型が異なります。Seriesだけでは、5つの個別のSeriesオブジェクトを維持し、インデックスの整合性を手動で保たなければなりません。

PYTHON
import pandas as pd

# 5つの個別のSeries — インデックスの整合性を手動で保つ必要がある
names = pd.Series(['ノートPC', 'スマートフォン', 'タブレット', 'モニター', 'キーボード'])
categories = pd.Series(['家電', '家電', '家電', '家電', 'アクセサリー'])
prices = pd.Series([999.99, 699.99, 349.99, 449.99, 79.99])
stocks = pd.Series([50, 120, 80, 35, 200])
ratings = pd.Series([4.7, 4.5, 4.3, 4.6, 4.2])
# どの価格がどの商品に対応している?インデックスが揃っていることを祈るしかない!
TEXT 📖 参照専用
> **出力:** ローカルのPython環境(pandas 2.x)で実行してください。Pistonサーバーにはpandasがプリインストールされていません。ローカルにインストール(`pip install pandas`)して試してみてください。実際の値はpandasのバージョンによって若干異なる場合があります。

(2) 解決策:DataFrameで列をまとめる

▶ サンプル:DataFrameで商品データを管理する(難易度 ⭐)

TEXT 📖 参照専用
> **出力:** ローカルのPython環境(pandas 2.x)で実行してください。Pistonサーバーにはpandasがプリインストールされていません。ローカルにインストール(`pip install pandas`)して試してみてください。実際の値はpandasのバージョンによって若干異なる場合があります。
PYTHON
import pandas as pd

df = pd.DataFrame({
    'name': ['ノートPC', 'スマートフォン', 'タブレット', 'モニター', 'キーボード'],
    'category': ['家電', '家電', '家電', '家電', 'アクセサリー'],
    'price': [999.99, 699.99, 349.99, 449.99, 79.99],
    'stock': [50, 120, 80, 35, 200],
    'rating': [4.7, 4.5, 4.3, 4.6, 4.2]
})

print(df)
#          name     category    price  stock  rating
# 0      ノートPC         家電   999.99     50     4.7
# 1  スマートフォン         家電   699.99    120     4.5
# 2    タブレット         家電   349.99     80     4.3
# 3      モニター         家電   449.99     35     4.6
# 4    キーボード   アクセサリー    79.99    200     4.2

print(df['name'])     # Series
print(df.loc[0])      # 最初の行をSeriesとして取得
TEXT 📖 参照専用
> **出力:** ローカルのPython環境(pandas 2.x)で実行してください。Pistonサーバーにはpandasがプリインストールされていません。ローカルにインストール(`pip install pandas`)して試してみてください。実際の値はpandasのバージョンによって若干異なる場合があります。

5つの列すべてが1つのDataFrameにまとめられ、自己説明的な列名と自動的な行の整合性が保たれます。

(3) メリット:DataFrameは「列の集合体」

DataFrameは「2次元のndarray」ではありません。Seriesの順序付き辞書です。各列は独自のdtypeを持つ独立したSeriesですが、すべての列は同じ行のIndexを共有しています。



3. DataFrameの基本的な構造

(1) 内部構造図

100%
graph TB
    subgraph DataFrame
        direction TB
        COL["Columns Index<br/>(name, category, price, stock, rating)"]
        ROW["Row Index<br/>(0, 1, 2, 3, 4)"]
        S1["Series: name<br/>dtype: object"]
        S2["Series: category<br/>dtype: object"]
        S3["Series: price<br/>dtype: float64"]
        S4["Series: stock<br/>dtype: int64"]
        S5["Series: rating<br/>dtype: float64"]
    end
    ROW --> S1
    ROW --> S2
    ROW --> S3
    ROW --> S4
    ROW --> S5
    COL --> S1
    COL --> S2
    COL --> S3
    COL --> S4
    COL --> S5
TEXT 📖 参照専用
> **出力:** ローカルのPython環境(pandas 2.x)で実行してください。Pistonサーバーにはpandasがプリインストールされていません。ローカルにインストール(`pip install pandas`)して試してみてください。実際の値はpandasのバージョンによって若干異なる場合があります。
概念 説明 例え
行インデックス すべての列で共有される行ラベル Excelの行番号
Columns 各列の名前ラベル Excelの列ヘッダー
列Series 各列は独立したSeries Excelの1列
values 内部の2次元ndarray 生のデータ行列

(2) DataFrameと2次元ndarrayの比較

機能 NumPy 2次元ndarray Pandas DataFrame
型の制約 全体で1つのdtype 列ごとに独立したdtype
行ラベル なし(整数の位置) Index(カスタマイズ可能)
列ラベル なし(整数の位置) Columns(列名)
列の選択 arr[:, 2] df['price']
行の選択 arr[0, :] df.loc[0]
混合型 非対応 ネイティブに対応
欠損値 np.nan(floatのみ) NaN / NaT / pd.NA
📌 ポイント: DataFrameのvaluesプロパティは2次元のndarrayを返しますが、混合型の場合はobject型になります。パフォーマンスが大幅に低下するため、純粋な数値演算を行う場合は、まず数値列を選択してから.valuesを呼び出してください。



4. DataFrameを作成する複数の方法

(1) 辞書から作成(最も一般的)

▶ サンプル:辞書からDataFrameを作成する(難易度 ⭐)

TEXT 📖 参照専用
> **出力:** ローカルのPython環境(pandas 2.x)で実行してください。Pistonサーバーにはpandasがプリインストールされていません。ローカルにインストール(`pip install pandas`)して試してみてください。実際の値はpandasのバージョンによって若干異なる場合があります。
PYTHON
import pandas as pd

# リストの辞書:キー = 列名、値 = 列データ
df = pd.DataFrame({
    'product': ['コーヒー', '紅茶', 'ジュース', '水'],
    'price': [4.50, 3.80, 5.20, 1.50],
    'calories': [5, 2, 120, 0]
})
print(df)
#   product  price  calories
# 0  コーヒー   4.50         5
# 1      紅茶   3.80         2
# 2  ジュース   5.20       120
# 3        水   1.50         0

# カスタム行インデックス
df2 = pd.DataFrame({
    'product': ['コーヒー', '紅茶', 'ジュース'],
    'price': [4.50, 3.80, 5.20]
}, index=['A001', 'A002', 'A003'])
print(df2.index)  # Index(['A001', 'A002', 'A003'])
TEXT 📖 参照専用
> **出力:** ローカルのPython環境(pandas 2.x)で実行してください。Pistonサーバーにはpandasがプリインストールされていません。ローカルにインストール(`pip install pandas`)して試してみてください。実際の値はpandasのバージョンによって若干異なる場合があります。

(2) リストのリストから作成

▶ サンプル:リストのリストからDataFrameを作成する(難易度 ⭐)

TEXT 📖 参照専用
> **出力:** ローカルのPython環境(pandas 2.x)で実行してください。Pistonサーバーにはpandasがプリインストールされていません。ローカルにインストール(`pip install pandas`)して試してみてください。実際の値はpandasのバージョンによって若干異なる場合があります。
PYTHON
import pandas as pd

# リストのリスト:内側の各リスト = 1行
data = [
    ['コーヒー', 4.50, 5],
    ['紅茶', 3.80, 2],
    ['ジュース', 5.20, 120],
    ['水', 1.50, 0]
]
df = pd.DataFrame(data, columns=['product', 'price', 'calories'])
print(df)
TEXT 📖 参照専用
> **出力:** ローカルのPython環境(pandas 2.x)で実行してください。Pistonサーバーにはpandasがプリインストールされていません。ローカルにインストール(`pip install pandas`)して試してみてください。実際の値はpandasのバージョンによって若干異なる場合があります。

(3) 辞書のリストから作成

▶ サンプル:辞書のリストからDataFrameを作成する(難易度 ⭐)

TEXT 📖 参照専用
> **出力:** ローカルのPython環境(pandas 2.x)で実行してください。Pistonサーバーにはpandasがプリインストールされていません。ローカルにインストール(`pip install pandas`)して試してみてください。実際の値はpandasのバージョンによって若干異なる場合があります。
PYTHON
import pandas as pd

# 辞書のリスト:各辞書 = 1行
data = [
    {'product': 'コーヒー', 'price': 4.50, 'calories': 5},
    {'product': '紅茶', 'price': 3.80, 'calories': 2},
    {'product': 'ジュース', 'price': 5.20, 'calories': 120}
]
df = pd.DataFrame(data)
print(df)
# 存在しないキーはNaNになる
data2 = [
    {'product': 'コーヒー', 'price': 4.50},
    {'product': '紅茶', 'calories': 2}
]
df2 = pd.DataFrame(data2)
print(df2)
#   product  price  calories
# 0  コーヒー   4.50       NaN
# 1      紅茶    NaN       2.0
TEXT 📖 参照専用
> **出力:** ローカルのPython環境(pandas 2.x)で実行してください。Pistonサーバーにはpandasがプリインストールされていません。ローカルにインストール(`pip install pandas`)して試してみてください。実際の値はpandasのバージョンによって若干異なる場合があります。

(4) NumPyのndarrayから作成

▶ サンプル:ndarrayからDataFrameを作成する(難易度 ⭐)

TEXT 📖 参照専用
> **出力:** ローカルのPython環境(pandas 2.x)で実行してください。Pistonサーバーにはpandasがプリインストールされていません。ローカルにインストール(`pip install pandas`)して試してみてください。実際の値はpandasのバージョンによって若干異なる場合があります。
PYTHON
import numpy as np
import pandas as pd

arr = np.random.randn(4, 3)  # 4行3列の乱数
df = pd.DataFrame(arr, columns=['A', 'B', 'C'])
print(df.shape)   # (4, 3)
print(df.dtypes)  # すべてfloat64
TEXT 📖 参照専用
> **出力:** ローカルのPython環境(pandas 2.x)で実行してください。Pistonサーバーにはpandasがプリインストールされていません。ローカルにインストール(`pip install pandas`)して試してみてください。実際の値はpandasのバージョンによって若干異なる場合があります。

(5) 作成方法の比較

方法 構文 特徴 ユースケース
辞書 pd.DataFrame({'col': [data]}) 列志向、最も自然 最も一般的
リストのリスト pd.DataFrame([[r1c1, ...], ...]) 行志向 行ごとに構築する場合
辞書のリスト pd.DataFrame([{'col': val, ...}, ...]) 行志向、欠落キーは自動でNaN API/JSONデータ
ndarray pd.DataFrame(np.array(...)) 同質データ NumPyデータの変換
read_csv pd.read_csv('file.csv') ファイルから読み込み 実際のプロジェクトで最も一般的


5. データの確認と探索

(1) クイックプレビュー:head / tail / sample

▶ サンプル:DataFrameのプレビュー(難易度 ⭐)

TEXT 📖 参照専用
> **出力:** ローカルのPython環境(pandas 2.x)で実行してください。Pistonサーバーにはpandasがプリインストールされていません。ローカルにインストール(`pip install pandas`)して試してみてください。実際の値はpandasのバージョンによって若干異なる場合があります。
PYTHON
import pandas as pd

df = pd.DataFrame({
    'name': ['ノートPC', 'スマートフォン', 'タブレット', 'モニター', 'キーボード',
             'マウス', 'ヘッドセット', 'スピーカー', 'カメラ', '充電器'],
    'price': [999.99, 699.99, 349.99, 449.99, 79.99,
              29.99, 149.99, 89.99, 599.99, 19.99],
    'stock': [50, 120, 80, 35, 200, 300, 150, 180, 25, 500]
})

print(df.head())      # 最初の5行
print(df.head(3))     # 最初の3行
print(df.tail(2))     # 最後の2行
print(df.sample(3))   # ランダムに3行(確認用)
TEXT 📖 参照専用
> **出力:** ローカルのPython環境(pandas 2.x)で実行してください。Pistonサーバーにはpandasがプリインストールされていません。ローカルにインストール(`pip install pandas`)して試してみてください。実際の値はpandasのバージョンによって若干異なる場合があります。

(2) データの概要:info

▶ サンプル:infoメソッドの詳細(難易度 ⭐⭐)

TEXT 📖 参照専用
> **出力:** ローカルのPython環境(pandas 2.x)で実行してください。Pistonサーバーにはpandasがプリインストールされていません。ローカルにインストール(`pip install pandas`)して試してみてください。実際の値はpandasのバージョンによって若干異なる場合があります。
PYTHON
import pandas as pd
import numpy as np

df = pd.DataFrame({
    'name': ['アリス', 'ボブ', 'チャーリー', 'キャロル', 'デビッド'],
    'age': [28, 34, 25, 30, 45],
    'salary': [75000.0, 92000.0, np.nan, 88000.0, 105000.0],
    'department': ['営業', 'エンジニアリング', 'マーケティング', '営業', '経営']
})

df.info()
# <class 'pandas.core.frame.DataFrame'>
# RangeIndex: 5 entries, 0 to 4
# Data columns (total 4 columns):
#  #   Column      Non-Null Count  Dtype
# ---  ------      --------------  -----
#  0   name        5 non-null      object
#  1   age         5 non-null      int64
#  2   salary      4 non-null      float64  ← 欠損値が1つ!
#  3   department  5 non-null      object
# dtypes: float64(1), int64(1), object(2)
# memory usage: 288.0+ bytes
TEXT 📖 参照専用
> **出力:** ローカルのPython環境(pandas 2.x)で実行してください。Pistonサーバーにはpandasがプリインストールされていません。ローカルにインストール(`pip install pandas`)して試してみてください。実際の値はpandasのバージョンによって若干異なる場合があります。

info()はデータ分析の最初のステップです。行数、各列のdtype、欠損値の有無、メモリ使用量を教えてくれます。

(3) 統計サマリー:describe

▶ サンプル:describeによる統計サマリー(難易度 ⭐)

TEXT 📖 参照専用
> **出力:** ローカルのPython環境(pandas 2.x)で実行してください。Pistonサーバーにはpandasがプリインストールされていません。ローカルにインストール(`pip install pandas`)して試してみてください。実際の値はpandasのバージョンによって若干異なる場合があります。
PYTHON
import pandas as pd

df = pd.DataFrame({
    'price': [999.99, 699.99, 349.99, 449.99, 79.99],
    'stock': [50, 120, 80, 35, 200],
    'rating': [4.7, 4.5, 4.3, 4.6, 4.2]
})

# 数値列のみ(デフォルト)
print(df.describe())
#           price    stock   rating
# count     5.00     5.00     5.00
# mean    515.79    97.00     4.46
# std     347.31    69.72     0.21
# min      79.99    35.00     4.20
# 25%     349.99    50.00     4.30
# 50%     449.99    80.00     4.50
# 75%     699.99   120.00     4.60
# max     999.99   200.00     4.70

# すべての列を含む
print(df.describe(include='all'))
TEXT 📖 参照専用
> **出力:** ローカルのPython環境(pandas 2.x)で実行してください。Pistonサーバーにはpandasがプリインストールされていません。ローカルにインストール(`pip install pandas`)して試してみてください。実際の値はpandasのバージョンによって若干異なる場合があります。
メソッド 表示内容 ユースケース
df.head() 最初の5行 データ形式のクイック確認
df.info() 行数 / 列のdtype / 欠損値 / メモリ 最初に必ず確認するステップ
df.describe() 数値列の統計サマリー 分布の把握
df.shape (行数, 列数) データの次元
df.dtypes 各列のdtype 型の確認


6. DataFrameの主要プロパティ

(1) プロパティ早見表

プロパティ 戻り値の型 説明 例
df.shape tuple (行数, 列数) (5, 4)
df.index Index 行ラベル RangeIndex(0, 5)
df.columns Index 列名 Index(['name', 'age', ...])
df.dtypes Series 各列のdtype name: object, age: int64
df.values ndarray 内部データ 2次元配列
df.ndim int 次元数 2
df.size int 要素の総数 20(5行 x 4列)
df.T DataFrame 転置 行と列が入れ替わる

▶ サンプル:主要プロパティの一覧(難易度 ⭐)

TEXT 📖 参照専用
> **出力:** ローカルのPython環境(pandas 2.x)で実行してください。Pistonサーバーにはpandasがプリインストールされていません。ローカルにインストール(`pip install pandas`)して試してみてください。実際の値はpandasのバージョンによって若干異なる場合があります。
PYTHON
import pandas as pd

df = pd.DataFrame({
    'name': ['アリス', 'ボブ', 'チャーリー'],
    'age': [28, 34, 25],
    'salary': [75000.0, 92000.0, 68000.0]
})

print(f"Shape:    {df.shape}")      # (3, 3)
print(f"Index:    {df.index}")      # RangeIndex(0, 3)
print(f"Columns:  {df.columns}")    # Index(['name', 'age', 'salary'])
print(f"Dtypes:\n{df.dtypes}")
print(f"Size:     {df.size}")       # 9
print(f"Ndim:     {df.ndim}")       # 2
TEXT 📖 参照専用
> **出力:** ローカルのPython環境(pandas 2.x)で実行してください。Pistonサーバーにはpandasがプリインストールされていません。ローカルにインストール(`pip install pandas`)して試してみてください。実際の値はpandasのバージョンによって若干異なる場合があります。

(2) 列の選択と追加

▶ サンプル:列の操作(難易度 ⭐)

TEXT 📖 参照専用
> **出力:** ローカルのPython環境(pandas 2.x)で実行してください。Pistonサーバーにはpandasがプリインストールされていません。ローカルにインストール(`pip install pandas`)して試してみてください。実際の値はpandasのバージョンによって若干異なる場合があります。
PYTHON
import pandas as pd

df = pd.DataFrame({
    'name': ['アリス', 'ボブ', 'チャーリー'],
    'age': [28, 34, 25],
    'salary': [75000.0, 92000.0, 68000.0]
})

# 単一の列を選択 → Series
print(type(df['name']))   # <class 'pandas.core.series.Series'>

# 複数の列を選択 → DataFrame
print(df[['name', 'salary']])

# 新しい列を追加
df['bonus'] = df['salary'] * 0.1
df['level'] = df['age'].apply(lambda x: 'シニア' if x >= 30 else 'ジュニア')
print(df)
TEXT 📖 参照専用
> **出力:** ローカルのPython環境(pandas 2.x)で実行してください。Pistonサーバーにはpandasがプリインストールされていません。ローカルにインストール(`pip install pandas`)して試してみてください。実際の値はpandasのバージョンによって若干異なる場合があります。

(3) 転置

▶ サンプル:DataFrameの転置(難易度 ⭐)

TEXT 📖 参照専用
> **出力:** ローカルのPython環境(pandas 2.x)で実行してください。Pistonサーバーにはpandasがプリインストールされていません。ローカルにインストール(`pip install pandas`)して試してみてください。実際の値はpandasのバージョンによって若干異なる場合があります。
PYTHON
import pandas as pd

df = pd.DataFrame({
    'Q1': [320, 280, 350],
    'Q2': [410, 390, 420]
}, index=['商品A', '商品B', '商品C'])

print(df.T)
#              商品A  商品B  商品C
# Q1          320    280    350
# Q2          410    390    420
TEXT 📖 参照専用
> **出力:** ローカルのPython環境(pandas 2.x)で実行してください。Pistonサーバーにはpandasがプリインストールされていません。ローカルにインストール(`pip install pandas`)して試してみてください。実際の値はpandasのバージョンによって若干異なる場合があります。


7. 総合サンプル:ECサイト商品テーブルのエンドツーエンド

▶ サンプル:商品データの作成と探索(難易度 ⭐⭐⭐)

TEXT 📖 参照専用
> **出力:** ローカルのPython環境(pandas 2.x)で実行してください。Pistonサーバーにはpandasがプリインストールされていません。ローカルにインストール(`pip install pandas`)して試してみてください。実際の値はpandasのバージョンによって若干異なる場合があります。
PYTHON
import pandas as pd
import numpy as np

# ============================================
# 総合サンプル:ECサイト商品テーブルの
# 作成と探索
# ============================================

# 1. DataFrameの作成
products = pd.DataFrame({
    'name': ['ノートPC', 'スマートフォン', 'タブレット', 'モニター', 'キーボード',
             'マウス', 'ヘッドセット', 'スピーカー'],
    'category': ['家電', '家電', '家電',
                 '家電', 'アクセサリー', 'アクセサリー',
                 'アクセサリー', 'アクセサリー'],
    'price': [999.99, 699.99, 349.99, 449.99, 79.99,
              29.99, 149.99, 89.99],
    'stock': [50, 120, 80, 35, 200, 300, 150, 180],
    'rating': [4.7, 4.5, 4.3, 4.6, 4.2, 4.0, 4.4, 4.1]
})

# 2. 概要
print("=== 商品カタログ概要 ===")
print(f"商品数: {len(products)}")
print(f"カテゴリ: {products['category'].unique().tolist()}")
print(f"列: {products.columns.tolist()}")

# 3. データ型とメモリ
print(f"\n=== データ型 ===")
print(products.dtypes)
print(f"\nメモリ使用量: {products.memory_usage(deep=True).sum() / 1024:.1f} KB")

# 4. クイック統計
print(f"\n=== 価格の統計 ===")
print(products['price'].describe())

# 5. 商品ごとの在庫金額
products['inventory_value'] = products['price'] * products['stock']
print(f"\n=== 在庫金額トップ3 ===")
print(products.nlargest(3, 'inventory_value')[['name', 'inventory_value']])

# 6. カテゴリ別の集計
print(f"\n=== カテゴリ別サマリー ===")
cat_summary = products.groupby('category').agg(
    count=('name', 'count'),
    avg_price=('price', 'mean'),
    total_stock=('stock', 'sum')
)
print(cat_summary)
TEXT 📖 参照専用
> **出力:** ローカルのPython環境(pandas 2.x)で実行してください。Pistonサーバーにはpandasがプリインストールされていません。ローカルにインストール(`pip install pandas`)して試してみてください。実際の値はpandasのバージョンによって若干異なる場合があります。

期待される出力(抜粋):

TEXT 📖 参照専用
=== 商品カタログ概要 ===
商品数: 8
カテゴリ: ['家電', 'アクセサリー']
列: ['name', 'category', 'price', 'stock', 'rating']

=== 価格の統計 ===
count       8.00
mean      349.99
std       339.32
min        29.99
max       999.99

=== 在庫金額トップ3 ===
          name  inventory_value
0      ノートPC         49999.50
1  スマートフォン         83998.80
3      モニター         15749.65

=== カテゴリ別サマリー ===
              count  avg_price  total_stock
category
アクセサリー       4      87.24          830
家電             4     624.99          285

❓ よくある質問

Q DataFrameとSeriesの関係は何ですか?
A DataFrameはSeriesの順序付き集合体です。各列は1つのSeriesであり、すべての列は同じ行のIndexを共有しています。単一の列を選択するとSeriesが返され、複数の列を選択するとDataFrameが返されます。単一の行を選択した場合もSeriesが返されます(列名がIndexになります)。
Q 列を数値インデックスでアクセスできますか?
A はい、できます。列名が整数(例:0, 1, 2)の場合、df[0]は曖昧になります。Pandasはこれを位置ではなく列名として扱います。その場合は、位置によるアクセスにはdf.iloc[:, 0]を、ラベルによるアクセスにはdf.loc[:, 0]を使用してください。混乱を避けるため、文字列の列名を使用することをお勧めします。
Q infoとdescribeの違いは何ですか?
A infoは構造情報(行数 / 列のdtype / 欠損値 / メモリ)を表示し、describeは統計サマリー(平均 / 標準偏差 / 四分位数 / 最小値・最大値)を表示します。infoは「データがどのような構造か」に答え、describeは「値がどのように分布しているか」に答えます。両者は補完関係にあります。データセットを初めて扱う際は、両方を確認してください。
Q 列の追加や削除はどうすればよいですか?
A 列の追加にはdf['new_col'] = values(末尾に追加)またはdf.insert(pos, 'new_col', values)(特定の位置に挿入)を使用します。列の削除にはdf.drop('col', axis=1)またはdel df['col']を使用します。dropは新しいDataFrameを返しますが(元は変更されません)、delはその場で変更します。
Q valuesは何を返しますか?
A df.valuesは内部の2次元NumPy ndarrayを返します。DataFrameが混合型(例:object + int64)の場合、ndarrayのdtypeはobjectにアップキャストされ、ベクトル化のパフォーマンスが失われます。純粋に数値のみのDataFrameの場合、valuesは数値のdtypeを維持します。
Q DataFrameを転置するにはどうすればよいですか?
A df.Tまたはdf.transpose()を使用します。転置後、行が列に、列が行になります。注意:元のDataFrameが混合型の場合、転置後はすべての列がobject型になります(ndarrayは同質の型を要求するため)。
Q DataFrameの作成には辞書とリストのどちらを使うべきですか?
A 辞書が最も自然な方法です(キー = 列名、値 = 列データ)。日常的な使用には辞書をお勧めします。辞書のリストは行ごとの構築に適しています(例:APIからのJSONデータ)。ndarrayは純粋な数値データに適しています。実際のプロジェクトでは、80%のケースでpd.read_csv()を使ってファイルから読み込みます。

📖 まとめ


📝 練習問題

  1. 基礎(難易度 ⭐):3つの異なる方法で学生テーブル(名前 / 数学 / 英語 / 理科)を作成し、infoとdescribeの結果を出力してください。
  2. 中級(難易度 ⭐⭐):欠損値を含む従業員テーブル(名前 / 年齢 / 給与 / 部署、給与に2つのNaNエントリ)を作成し、以下を行ってください:infoで欠損値を確認 → 各列の非Null比率を計算 → salary_level列を追加(給与 > 80000は「高」、それ以外は「低」、NaNは「不明」)。
  3. 挑戦(難易度 ⭐⭐⭐):辞書のリストからDataFrameを構築し(5レコード、一部のキーが欠落)、以下を行ってください:欠損値の確認 → 列の平均値/最頻値で埋める → 行ごとの非Nullフィールド数をカウント → completeness列(非Null比率)を追加し、最後に完全なdescribeレポートを出力してください。

← 前へ:Series入門 · 次へ:インデックスシステム →

Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%