remove_empty, remove_constant
データフレームの空白列および、定数列の削除
概要
py4stats.remove_empty()はR言語の janitor:remove_empty() をオマージュした関数で、全ての要素が NaN である列や行をデータフレームから除外します py4stats.remove_constant() はR言語の janitor:remove_constant() をオマージュした関数で、1種類だけの要素からなる列をデータフレームから除外します。
remove_empty(
data: IntoFrameT,
cols: bool = True,
rows: bool = True,
cutoff: float = 1.0,
quiet: bool = True,
to_native: bool = True,
**kwargs: Any
)
remove_constant(
data: IntoFrameT,
quiet: bool = True,
dropna = False,
to_native: bool = True,
**kwargs: Any
)引数 Argument
data:IntoFrameT(必須)
入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト
(例:pandas.DataFrame、polars.DataFrame、pyarrow.Table)を指定できます。cols:bool
空白列を削除するかどうかを表すブール値(remove_empty()のみ)。True(初期設定) なら空白列を削除し、Falseなら全ての要素がNaNの列があっても削除しません。rows:bool
空白行を削除するかどうかを表すブール値(remove_empty()のみ)。True(初期設定) なら空白行を削除し、Falseなら全ての要素がNaNの行があっても削除しません。cutoff:float
列(行)の削除を行うかどうかを判定する欠測率の閾値(remove_empty()のみ)。ある列(行)におけるNaNの割合が>= cutoffのとき、その列(行)を削除します。初期設定は1で全ての要素がNaNの列(行)のみ削除しますが、例えばcutoff = 0.9とすることでNaNの割合9が割以上の列(行)を削除できます。quiet:bool
削除した列(行)を報告するかどうかを表すブール値。quiet = True(初期設定) であれば何も報告せずに削除だけ行い、quiet = Falseなら、削除した列(行)の数と列名(行名)を報告します。dropna:bool
ユニーク値の数を計算する際に、NaNを除外するかどうかを表すブール値(remove_constant()のみ)。dropna = TrueだとNaNを除外し、dropna = False(初期設定)だとNaNを除外しません。データフレームにNaNと、NaNではない1種類の値からなる列がある場合、dropna = Falseだと削除されず、dropna = Trueだと削除されます。to_native: bool
Trueの場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。
Falseの場合、narwhals.DataFrameを返します。デフォルトはTrueで、to_native = Falseは、主にライブラリ内部での利用や、バックエンドに依存しない後続処理を行う場合を想定したオプションです。
使用例 Example
py4stats.remove_empty() の使用例。
import py4stats as py4st
import pandas as pd
from palmerpenguins import load_penguins
penguins = load_penguins() # サンプルデータの読み込み
penguins2 = penguins.loc[:, ['species', 'body_mass_g']].copy()
# 空白列を作成
penguins2.loc[:, 'empty'] = np.nan
# 空白行を作成
penguins2.loc[344, :] = np.nan
print(penguins2.tail(3))
#> species body_mass_g empty
#> 342 Chinstrap 4100.0 NaN
#> 343 Chinstrap 3775.0 NaN
#> 344 NaN NaN NaN# 完全に空白な行と列を削除。
print(py4st.remove_empty(penguins2, quiet = False).tail(3))
#> Removing 1 empty column(s) out of 3 columns(Removed: empty).
#> Removing 1 empty row(s) out of 345 rows(Removed: 344).
#> species body_mass_g
#> 341 Chinstrap 3775.0
#> 342 Chinstrap 4100.0
#> 343 Chinstrap 3775.0
# 完全に空白な列のみ削除。
print(py4st.remove_empty(penguins2, rows = False, quiet = False).tail(3))
#> Removing 1 empty column(s) out of 3 columns(Removed: empty).
#> species body_mass_g
#> 342 Chinstrap 4100.0
#> 343 Chinstrap 3775.0
#> 344 NaN NaN
# 完全に空白な行のみ削除。
print(py4st.remove_empty(penguins2, cols = False, quiet = False).tail(3))
#> Removing 1 empty row(s) out of 345 rows(Removed: 344).
#> species body_mass_g empty
#> 341 Chinstrap 3775.0 NaN
#> 342 Chinstrap 4100.0 NaN
#> 343 Chinstrap 3775.0 NaN# quiet = True の場合
print(py4st.remove_empty(penguins2).tail(3))
#> species body_mass_g
#> 341 Chinstrap 3775.0
#> 342 Chinstrap 4100.0
#> 343 Chinstrap 3775.0py4stats.remove_constant() の使用例。
penguins2 = penguins.loc[:, ['species', 'body_mass_g']].copy()
penguins2.loc[:, 'constant'] = 'c'
print(penguins2.head(3))
#> species body_mass_g constant
#> 0 Adelie 3750.0 c
#> 1 Adelie 3800.0 c
#> 2 Adelie 3250.0 c
print(py4st.remove_constant(penguins2, quiet = False).head(3))
#> Removing 1 constant column(s) out of 3 column(s)(Removed: constant).
#> species body_mass_g
#> 0 Adelie 3750.0
#> 1 Adelie 3800.0
#> 2 Adelie 3250.0penguins2.loc[:, 'almost_empty'] = pd.NA
penguins2.loc[1, 'almost_empty'] = 'c'
# dropna = False なら、almost_empty は削除されません。
print(py4st.remove_constant(penguins2).head(3))
#> species body_mass_g almost_empty
#> 0 Adelie 3750.0 <NA>
#> 1 Adelie 3800.0 c
#> 2 Adelie 3250.0 <NA>
print(py4st.remove_constant(penguins2, dropna = True).head(3))
#> species body_mass_g
#> 0 Adelie 3750.0
#> 1 Adelie 3800.0
#> 2 Adelie 3250.0