remove_empty, remove_constant

badge of tested backend

データフレームの空白列および、定数列の削除

概要

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

  • dataIntoFrameT(必須)
    入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト
    (例:pandas.DataFramepolars.DataFramepyarrow.Table)を指定できます。
  • colsbool
     空白列を削除するかどうかを表すブール値(remove_empty() のみ)。True(初期設定) なら空白列を削除し、Falseなら全ての要素が NaN の列があっても削除しません。
  • rowsbool
     空白行を削除するかどうかを表すブール値(remove_empty() のみ)。True(初期設定) なら空白行を削除し、Falseなら全ての要素が NaN の行があっても削除しません。
  • cutofffloat
     列(行)の削除を行うかどうかを判定する欠測率の閾値(remove_empty() のみ)。ある列(行)における NaN の割合が >= cutoff のとき、その列(行)を削除します。初期設定は1で全ての要素が NaN の列(行)のみ削除しますが、例えば cutoff = 0.9 とすることで NaN の割合9が割以上の列(行)を削除できます。
  • quietbool
     削除した列(行)を報告するかどうかを表すブール値。quiet = True(初期設定) であれば何も報告せずに削除だけ行い、quiet = False なら、削除した列(行)の数と列名(行名)を報告します。
  • dropnabool
     ユニーク値の数を計算する際に、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.0

py4stats.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.0
penguins2.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

Return to Function reference.