pandas を使ううえで最初に覚えるのが DataFrame の作成方法だ。データの形式に応じていくつかの手段が用意されており、状況に合わせて使い分けることで効率よく作業を進められる。
辞書から作成する
もっとも直感的な方法は、Python の辞書を渡すやり方です。キーが列名、値がデータのリストになります。
import pandas as pd
data = {
"name": ["Alice", "Bob", "Charlie"],
"age": [25, 30, 35],
"city": ["Tokyo", "Osaka", "Nagoya"]
}
df = pd.DataFrame(data)
print(df)
辞書のキーがそのまま列名として使われるため、構造がわかりやすいのが利点です。列の順序は Python 3.7 以降であれば辞書の挿入順が保持されます。
リストのリストから作成する
行単位でデータを持っている場合は、リストのリストを使うほうが自然です。この場合は columns 引数で列名を明示的に指定します。
rows = [
["Alice", 25, "Tokyo"],
["Bob", 30, "Osaka"],
["Charlie", 35, "Nagoya"]
]
df = pd.DataFrame(rows, columns=["name", "age", "city"])
API のレスポンスやスクレイピング結果など、行ごとにデータが得られるケースではこの方法が便利です。
辞書のリストから作成する
各行を 1 つの辞書として表現し、そのリストを渡す方法もあります。JSON 形式のデータと相性がよく、Web API からのレスポンスをそのまま DataFrame に変換できます。
records = [
{"name": "Alice", "age": 25, "city": "Tokyo"},
{"name": "Bob", "age": 30, "city": "Osaka"},
{"name": "Charlie", "age": 35, "city": "Nagoya"}
]
df = pd.DataFrame(records)
キーが一致しないレコードが混ざっていると、該当するセルは自動的に NaN で埋められます。データの欠損に注意しましょう。
NumPy 配列から作成する
数値データを扱う場合は NumPy 配列から直接 DataFrame を作ることもできます。
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
df = pd.DataFrame(arr, columns=["x", "y", "z"])
NumPy 配列はすべて同じ型であるため、型の不一致が起きにくいという特徴があります。科学計算やシミュレーション結果の整理に向いている方法です。
インデックスを指定する
どの作成方法でも、index 引数を渡せば行ラベルをカスタマイズできます。
df = pd.DataFrame(
{"score": [80, 95, 70]},
index=["math", "english", "science"]
)
デフォルトでは 0 から始まる連番が振られますが、意味のあるラベルを付けておくと、あとから loc でアクセスするときに便利です。
列単位でデータを管理しやすい。列名をキーにして直感的に記述できる
行単位でデータを管理しやすい。columns 引数で列名を別途指定する必要がある
実際の業務では CSV や Excel から読み込むケースが大半ですが、テストデータの準備やちょっとした検証には手動で DataFrame を組み立てる場面も多いため、基本的な作成方法を押さえておくと役立ちます。