論文一覧に戻る 📚 用語集トップ 🗺 概念マップ
📚 用語解説
📚 用語解説
DataFrame
DataFrame
データ処理
別称: データフレーム

🔖 キーワード索引

pandasDataFrameSeries表形式データ処理Python

💡 30秒で分かる結論

DataFrame ── pandasの表形式データ構造

📍 文脈 ── どこで出会うか

SSDSE のCSVを読み込んだ瞬間からあなたは DataFrame を触っています。 全データサイエンス作業の8割はこの上での操作と言って過言ではありません。

🎨 直感で掴む

都道府県データを例に:

       都道府県  人口      高齢化率  死亡率
0      北海道    5224614    32.5      12.1
1      青森県    1237984    34.6      14.2
2      岩手県    1210534    34.2      13.5
…

これが DataFrame。 行=都道府県、 列=変数、 インデックスは番号 or 都道府県名。

📐 定義/数式

DataFrameの3層の構造

🔬 記号を読み解く

Series
1次元、 同じ型。 DataFrameの1列に相当
dtype
列ごとの型(int64, float64, object, datetime64 等)
loc / iloc
ラベル指定 / 位置指定の参照
groupby
分割→適用→結合の3段階パターン(Split-Apply-Combine)
NaN
欠損値表現

🧮 実値で計算してみる

典型的な5操作:

1
2
3
4
5
df.head()                              # 先頭5行
df["高齢化率"].mean()                  # 列の平均
df[df["高齢化率"] > 30]                # フィルタ
df.groupby("地域")["人口"].sum()       # 集計
df.merge(df2, on="都道府県")           # 結合

🐍 Python 実装

最小限のスニペットで動作確認できる例。 公的データ(SSDSE 等)を想定しています。

1
2
3
4
5
6
7
8
9
import pandas as pd

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='utf-8', skiprows=1)
print(df.shape)            # (47, 列数)
print(df.dtypes.head())
print(df.describe())

# 高齢化率が高い順 Top 5
print(df.nlargest(5, '高齢化率')[['都道府県','高齢化率']])

⚠️ よくある落とし穴

❌ 1. SettingWithCopyWarning を無視
スライスへの代入は本体に反映されない場合あり。 .copy() 明示
❌ 2. inplace=True 多用
可読性低下&将来非推奨予定。 代入で書く
❌ 3. 巨大DataFrameをfor文で回す
遅い。 vectorize(列演算)または apply で
❌ 4. NaN を 0 と勘違い
集計で skipna=True がデフォだがゼロ埋めとは違う挙動
❌ 5. dtype の自動推定ミス
郵便番号が数値化されゼロが消えるなど。 dtype=strを明示

📚 関連グループ教材

この用語の全体像を学ぶには、 横断的な教材で文脈を掴むのが効率的です。

🔎 深掘り解説

頻出操作チートシート

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# 行操作
df.iloc[0]                     # 1行目(位置)
df.loc['秋田県']               # ラベル指定
df.head(5)                     # 先頭5行
df.sample(10)                  # ランダム10行

# 列操作
df[['人口','高齢化率']]         # 複数列
df['人口密度'] = df['人口']/df['面積']  # 新規列

# フィルタ
df[df['人口'] > 1e6]           # 条件
df.query("人口 > 1e6 and 高齢化率 < 30")

# 集約
df.groupby('地域')['人口'].agg(['mean','sum'])
df.pivot_table(index='地域', values='人口', aggfunc='sum')

# 結合
df1.merge(df2, on='都道府県', how='inner')
pd.concat([df1, df2], axis=0)

パフォーマンスTips

✅ 使う前のチェックリスト

📖 さらに学ぶには

本サイト内

外部リソース

困ったときは

  1. データの可視化(散布図、 ヒストグラム、 箱ひげ図)で異常を確認
  2. サンプルサイズ・欠損・外れ値を確認
  3. 仮定が満たされているか診断(正規性検定、 等分散性検定など)
  4. 類似研究での標準的な手法を確認
  5. 結果を複数手法でクロスチェック(頑健性確認)

🔎 深掘り解説

頻出操作チートシート

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# 行操作
df.iloc[0]                     # 1行目(位置)
df.loc['秋田県']               # ラベル指定
df.head(5)                     # 先頭5行
df.sample(10)                  # ランダム10行

# 列操作
df[['人口','高齢化率']]         # 複数列
df['人口密度'] = df['人口']/df['面積']  # 新規列

# フィルタ
df[df['人口'] > 1e6]           # 条件
df.query("人口 > 1e6 and 高齢化率 < 30")

# 集約
df.groupby('地域')['人口'].agg(['mean','sum'])
df.pivot_table(index='地域', values='人口', aggfunc='sum')

# 結合
df1.merge(df2, on='都道府県', how='inner')
pd.concat([df1, df2], axis=0)

パフォーマンスTips

✅ 使う前のチェックリスト

📖 さらに学ぶには

本サイト内

外部リソース

困ったときは

  1. データの可視化(散布図、 ヒストグラム、 箱ひげ図)で異常を確認
  2. サンプルサイズ・欠損・外れ値を確認
  3. 仮定が満たされているか診断(正規性検定、 等分散性検定など)
  4. 類似研究での標準的な手法を確認
  5. 結果を複数手法でクロスチェック(頑健性確認)