404 Not Found

404 Not Found


nginx

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

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%