DataFrame ── pandasの表形式データ構造
Series(1次元、 型統一)。 DataFrame は Series の辞書loc/iloc)/フィルタ(query)/集約(groupby)/結合(merge)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層の構造:
典型的な5操作:
1 2 3 4 5 | df.head() # 先頭5行 df["高齢化率"].mean() # 列の平均 df[df["高齢化率"] > 30] # フィルタ df.groupby("地域")["人口"].sum() # 集計 df.merge(df2, on="都道府県") # 結合 |
最小限のスニペットで動作確認できる例。 公的データ(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, '高齢化率')[['都道府県','高齢化率']]) |
.copy() 明示skipna=True がデフォだがゼロ埋めとは違う挙動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) |
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) |