1. pandasの2大データ構造
pandasには、覚えるべきデータ構造が2つだけあります。
- Series(シリーズ) … 1次元のデータ(1列分のデータ)。ラベル付きのリストのようなもの
- DataFrame(データフレーム) … 2次元のデータ(表全体)。複数のSeriesが横に並んだもの
前のレッスンで作った「表」が DataFrame、そこから df["年齢"] で取り出した「1列」が Series です。
「DataFrame(表)の各列は Series(1列)」 という関係を、このレッスンでしっかり押さえましょう。
この2つさえ分かれば、pandasの操作はぐっと理解しやすくなります。
2. Series — 1次元のデータ
Series は pd.Series(リスト) で作れます。Pythonのリストと似ていますが、大きな違いは
各要素に「index(ラベル)」が付くことです。index を指定しなければ 0 から自動で振られ、
指定すれば「曜日」や「患者名」などを目印にできます。
💡 Series と リストの違い: Pythonのリストは「位置(0,1,2…)」でしかアクセスできませんが、Series は 「火」「田中さん」のような意味のあるラベルでアクセスできます。 これにより、データが「何を表しているか」が分かりやすくなり、後の操作(並べ替え・結合)でも威力を発揮します。
3. DataFrame — 2次元の表
DataFrame は、複数のSeries(列)が横に並んだ表です。 前のレッスンと同じく辞書から作れますが、「各列がSeriesである」ことを今回は意識してみましょう。
💡 「表 = 列(Series)の集まり」:
DataFrame は、複数の Series を辞書のように束ねたものです。
df["年齢"] で1列を取り出すと Series が返り、df[["年齢", "BMI"]] のように
リストで複数列を指定すると、その列だけの DataFrame が返ります(列選択の詳細はレッスン5で扱います)。
4. DataFrameの構造を確認する(属性)
DataFrame には、その「形」や「中身の型」を確認するための属性が用意されています。 データを受け取ったとき、まずこれらで構造を把握するのが分析の基本です。
| 属性 | 意味 |
|---|---|
df.shape | (行数, 列数) のタプル |
df.index | 行ラベル(index)の一覧 |
df.columns | 列名の一覧 |
df.dtypes | 各列のデータ型 |
💡 dtypes(データ型)の読み方:
object… 文字列(氏名・診断名など)int64… 整数(年齢・回数など)※ブラウザ環境ではint32と表示される場合がありますfloat64… 小数(BMI・検査値など)
列ごとに型が違ってよいのがDataFrameの特徴です。型は計算や並べ替えの挙動に影響するので、最初に dtypes で確認する習慣をつけましょう。
5. 練習問題
患者名をindexにしたSeriesを作ろう
3人の患者の最高血圧(SBP)を、患者名をindexにしたSeriesで作ってください。
田中=120、佐藤=135、鈴木=118。そして「佐藤さんの値」と「最大値」を表示しましょう。
ヒントを見る(答え+解説)
import pandas as pd
# 患者名をindexにしたSeriesを作ってください
sbp = pd.Series([120, 135, 118], index=["田中", "佐藤", "鈴木"])
# 佐藤さんの値と、最大値を表示してください
print("佐藤さん:", sbp["佐藤"]) # 135
print("最大:", sbp.max()) # 135
pd.Series(値のリスト, index=ラベルのリスト) でラベル付きのSeriesが作れます。sbp["佐藤"] のようにラベルで値を取り出せるのがSeriesの便利な点です。
DataFrameの属性を確認しよう
下記の df について、shape・columns・dtypes を表示してください。
ヒントを見る(答え+解説)
import pandas as pd
df = pd.DataFrame({
"氏名": ["山田", "伊藤", "中村", "小林"],
"年齢": [40, 58, 29, 65],
"体温": [36.5, 37.2, 36.8, 38.1],
})
# shape, columns, dtypes を表示してください
print("shape:", df.shape) # (4, 3)
print("columns:", list(df.columns)) # ['氏名', '年齢', '体温']
print(df.dtypes) # 氏名=object, 年齢=int64, 体温=float64
4人×3列なので shape は (4, 3)。氏名は文字列(object)、年齢は整数(int64)、体温は小数(float64)と、列ごとに型が異なります。
1列を取り出してSeriesか確認しよう
下記の df から 体温 の列を取り出し、その平均と、取り出したものの型(type)を表示してください。
ヒントを見る(答え+解説)
import pandas as pd
df = pd.DataFrame({
"氏名": ["山田", "伊藤", "中村", "小林"],
"体温": [36.5, 37.2, 36.8, 38.1],
})
# 体温の列を取り出し、平均と型(type)を表示してください
taion = df["体温"]
print("平均:", taion.mean()) # 37.15
print("型:", type(taion)) # <class 'pandas.core.series.Series'>
1列を取り出すと Series が返ります。平均は (36.5+37.2+36.8+38.1)/4 = 37.15。「DataFrameの列=Series」を実感できる例です。
6. まとめ
このレッスンのポイント
- pandasのデータ構造は Series(1次元) と DataFrame(2次元の表) の2つ
- Series は index(ラベル)付きのデータ。
s["ラベル"]でアクセス - DataFrameの各列はSeries。
df["列名"]で1列(Series)が取れる shape・index・columns・dtypesで構造を確認できる- dtypes:文字列=object、整数=int64、小数=float64
自由に試してみましょう:
完了するとコース一覧に進捗が記録されます