この記事では、pandas ライブラリを使って DataFrame でよく使う基本操作をまとめています。
以下のような処理をひとつずつ丁寧に見ていきましょう。
- ファイルデータを読み込む
- 条件指定によるデータ抽出
- データ型の変換
- データの並び替え
- カラムの削除
- カラム同士の計算
-
apply()メソッドによる関数の適用 -
.valuesと.to_numpy()で配列化
✔ DataFrameとは?
DataFrame は、行と列からなる表形式のデータ構造です。
Excelのような表をPythonで扱えるようにしたものと考えるとわかりやすいです。
import pandas as pd
data = {
'名前': ['太郎', '花子', '次郎'],
'年齢': [25, 30, 22],
'身長(cm)': [170, 158, 175]
}
df = pd.DataFrame(data)
print(df)
名前 年齢 身長(cm)
0 太郎 25 170
1 花子 30 158
2 次郎 22 175
✔ ファイルデータを読み込む(CSVなど)
# CSVファイルの読み込み
df = pd.read_csv('sample.csv')
# Excelファイルの読み込み
df = pd.read_excel('sample.xlsx')
✔ 条件指定によるデータ抽出
# 年齢が25歳以上の行だけ抽出
df[df['年齢'] >= 25]
名前 年齢 身長(cm)
0 太郎 25 170
1 花子 30 158
✔ データ型の変換(astype)
# '年齢' カラムを float に変換
df['年齢'] = df['年齢'].astype(float)
print(df.dtypes)
名前 object
年齢 float64
身長(cm) int64
dtype: object
✔ データの並び替え(sort_values)
# 年齢で昇順に並び替え
df.sort_values(by='年齢', ascending=True)
名前 年齢 身長(cm)
2 次郎 22.0 175
0 太郎 25.0 170
1 花子 30.0 158
✔ カラムの削除(drop)
# '身長(cm)' カラムを削除(axis=1で列を指定)
df = df.drop('身長(cm)', axis=1)
print(df)
名前 年齢
0 太郎 25.0
1 花子 30.0
2 次郎 22.0
※ axis=0 は行を削除、axis=1 は列(カラム)を削除することを意味します。
✔ カラム同士の計算
# 新しく体重のデータを追加して、BMIを計算
df['体重(kg)'] = [60, 50, 65]
df['身長(m)'] = [170, 158, 175] / 100
df['BMI'] = df['体重(kg)'] / (df['身長(m)'] ** 2)
print(df[['名前', 'BMI']])
名前 BMI
0 太郎 20.761246
1 花子 20.032317
2 次郎 21.224490
✔ apply()メソッドで関数を適用
# 年齢に対してカテゴリ分けする関数を定義
def age_category(age):
if age < 25:
return '若年層'
elif age < 35:
return '中年層'
else:
return '高年層'
df['年齢カテゴリ'] = df['年齢'].apply(age_category)
print(df[['名前', '年齢', '年齢カテゴリ']])
名前 年齢 年齢カテゴリ
0 太郎 25.0 中年層
1 花子 30.0 中年層
2 次郎 22.0 若年層
✔ DataFrameやSeriesの値を配列で取り出す(values / to_numpy)
・すべてのデータを NumPy 配列で取得
print(df.values)
[['太郎' 25.0 60 1.7 20.761245674740486 '中年層']
['花子' 30.0 50 1.58 20.032316978193145 '中年層']
['次郎' 22.0 65 1.75 21.224489795918366 '若年層']]
・特定の列だけ配列に変換(Series → ndarray)
ages = df['年齢'].values
print(ages)
[25. 30. 22.]
・.to_numpy() との違い
基本的に同じ動作ですが、公式ドキュメントでは .to_numpy() の使用がより推奨されています。
df.to_numpy()
df['年齢'].to_numpy()
values も現場ではよく使われるため、初心者としてはどちらも知っておくと安心です。
✔ おわりに
この記事では、pandas.DataFrame の基本的な操作を一通り紹介しました。
どれも実務で非常によく使う処理ですので、ぜひ手を動かしながら覚えてみてください。
# 最後に DataFrame の全体を表示
print(df)
名前 年齢 体重(kg) 身長(m) BMI 年齢カテゴリ
0 太郎 25.0 60 1.70 20.761246 中年層
1 花子 30.0 50 1.58 20.032317 中年層
2 次郎 22.0 65 1.75 21.224490 若年層