csvデータを取り込んだ後、データの中身を整理する時(前処理)に使う便利なメソッドをまとめてます。
メソッド、メソッド引数まとめ
[box class=”blue_box” title=”メソッド”]
- dropna
- fillna
- isnull
- notisnull
指定した軸について、その軸のラベルの値に欠損値が含まれる場合は、ラベルごと削除する。削除する欠損値ラベルについて、閾値で指定可能。
欠損値を指定した値で穴埋めする。
ffill、bfillなどの指定した方法で穴埋めする。
各値が欠損値(NA)であるかどうかを示す、真偽値を戻す。
isnullの反対の動作をする。
[/box]
[box class=”blue_box” title=”メソッドの引数”]
- value
- method
- axis
- inplace
- limit
欠損値の穴埋めに使われるスカラー値。
穴埋め方法を指定する。デフォルトではffill。
穴埋めしたい軸、デフォルトではaxis=0(行方向)。
コピーを作るのではなく、呼び出し元のオブジェクトを直接変更。
前方(method=’ffill’)、後方(method=’bfill’)への穴埋め時に、
連続した穴埋めを最大何回まで行うか指定する
[/box]
欠損値の削除 dropna
import numpy as np
import pandas as pd
from numpy import nan as NA
data = pd.Series([1, NA, 3.5, NA, 7])
data
# 0 1.0
# 1 NaN
# 2 3.5
# 3 NaN
# 4 7.0
# dtype: float64Serieseの場合
# Serieseの場合
data.dropna()
# 0 1.0
# 2 3.5
# 4 7.0
# dtype: float64
# 同じ方法
data[data.notnull()]
# 0 1.0
# 2 3.5
# 4 7.0
# dtype: float64DataFrameの場合
# DataFrameの場合
data = pd.DataFrame([[1., 6.5, 3.], [1., NA, NA],
[NA, NA, NA], [NA, 6.5, 3.]])
data
# 1 1.0 6.5 3.0
# 2 1.0 NaN NaN
# 3 NaN NaN NaN
# 4 NaN 6.5 3.0cleaned = data.dropna()
cleaned
# 0 1.0 6.5 3.0how=’all’を指定すると、全ての行が欠損値である行のみ削除される
# how='all'を指定すると、全ての行が欠損値である行のみ削除される
data.dropna(how='all')
# 0 1.0 6.5 3.0
# 1 1.0 NaN NaN
# 3 NaN 6.5 3.0列の削除を行う場合は、axis=1を指定する
# 列の削除を行う場合は、axis=1を指定する
data[4] = NA # 4列目にNanの列を作成
data
# 0 1.0 6.5 3.0 NaN
# 1 1.0 NaN NaN NaN
# 2 NaN NaN NaN NaN
# 3 NaN 6.5 3.0 NaNdata.dropna(axis=1, how='all')
# 0 1.0 6.5 3.0
# 1 1.0 NaN NaN
# 2 NaN NaN NaN
# 3 NaN 6.5 3.0一定数の行を除外する場合は、threshを使う
# 一定数の行を除外する場合は、threshを使う
# (時系列データでよく使う)
df = pd.DataFrame(np.random.randn(7, 3))
df.iloc[:4, 1] = NA
df.iloc[:2, 2] = NA
df
# 0 -0.273576 NaN NaN
# 1 -1.824529 NaN NaN
# 2 -0.596045 NaN -0.280421
# 3 2.837498 NaN -1.643616
# 4 0.164265 1.337977 -1.005163
# 5 0.173674 0.803977 -0.640646
# 6 -0.227646 1.405479 0.940827df.dropna()
# 4 0.164265 1.337977 -1.005163
# 5 0.173674 0.803977 -0.640646
# 6 -0.227646 1.405479 0.940827df.dropna(thresh=2)
# 2 -0.596045 NaN -0.280421
# 3 2.837498 NaN -1.643616
# 4 0.164265 1.337977 -1.005163
# 5 0.173674 0.803977 -0.640646
# 6 -0.227646 1.405479 0.940827欠損値を穴埋めする fillna
# 上記のdfを使う
df.fillna(0) # 時系列で無いデータの場合平均値で埋める場合が多い
# 0 -0.273576 0.000000 0.000000
# 1 -1.824529 0.000000 0.000000
# 2 -0.596045 0.000000 -0.280421
# 3 2.837498 0.000000 -1.643616
# 4 0.164265 1.337977 -1.005163
# 5 0.173674 0.803977 -0.640646
# 6 -0.227646 1.405479 0.940827fillnaメソッドで列ごとに値を指定する
# fillnaメソッドにディクショナリを与えると、
# 列ごとに異なった値で埋める事もできる。
df.fillna({1: 0.5, 2: 0})
# 0 -0.273576 0.500000 0.000000
# 1 -1.824529 0.500000 0.000000
# 2 -0.596045 0.500000 -0.280421
# 3 2.837498 0.500000 -1.643616
# 4 0.164265 1.337977 -1.005163
# 5 0.173674 0.803977 -0.640646
# 6 -0.227646 1.405479 0.940827既存のオブジェクトを直接変更する場合
# 既存のオブジェクトを直接変更する場合
_ = df.fillna(0, inplace=True)
df
# 0 -0.273576 0.000000 0.000000
# 1 -1.824529 0.000000 0.000000
# 2 -0.596045 0.000000 -0.280421
# 3 2.837498 0.000000 -1.643616
# 4 0.164265 1.337977 -1.005163
# 5 0.173674 0.803977 -0.640646
# 6 -0.227646 1.405479 0.940827df = pd.DataFrame(np.random.randn(6, 3))
df
# 0 -1.174053 0.877008 0.757160
# 1 -0.691133 -1.313615 -0.543499
# 2 0.322590 0.271285 0.950885
# 3 0.842171 -1.697478 -0.560652
# 4 1.158943 0.138047 2.055909
# 5 1.904791 -1.028752 0.747728最終行の数字で穴埋めする場合、ffillを使う
# 最終行の数字で穴埋めする場合、ffillを使う
df = pd.DataFrame(np.random.randn(6, 3))
df.iloc[2:, 1] = NA
df.iloc[4:, 2] = NA
df
# 0 2.326546 0.720085 -0.024731
# 1 -0.297594 -0.335980 0.061773
# 2 0.710080 NaN 1.137681
# 3 0.028826 NaN 0.192786
# 4 -2.202417 NaN NaN
# 5 1.218762 NaN NaNdf.fillna(method='ffill')
# 0 2.326546 0.720085 -0.024731
# 1 -0.297594 -0.335980 0.061773
# 2 0.710080 -0.335980 1.137681
# 3 0.028826 -0.335980 0.192786
# 4 -2.202417 -0.335980 0.192786
# 5 1.218762 -0.335980 0.192786範囲を限定的にしたい時は、limitを使う
# 範囲を限定的にしたい時は、limitを使う
df.fillna(method='ffill', limit=2)
# 0 2.326546 0.720085 -0.024731
# 1 -0.297594 -0.335980 0.061773
# 2 0.710080 -0.335980 1.137681
# 3 0.028826 -0.335980 0.192786
# 4 -2.202417 NaN 0.192786
# 5 1.218762 NaN 0.192786
![]() |
|
|---|



コメント