compare_df_cols, compare_df_stats
データ型と統計値によるデータフレームの比較
概要
R言語の janitor::compare_df_cols() をオマージュした関数で、compare_df_cols() は複数の pandas.DataFrame に含まれる同じ名前を持つ列同士のデータ型 dtype を比較し、compare_df_stats() は同じ名前を持つ列同士の記述統計量を比較します。
compare_df_cols(
df_list: Union[List[IntoFrameT], Mapping[str, IntoFrameT]],
df_name: Optional[List[str]] = None,
return_match: Literal["all", "match", "mismatch"] = 'all',
dropna:bool = False,
to_native: bool = True
)
compare_df_stats(
df_list: List[IntoFrameT],
df_name: Optional[List[str]] = None,
return_match: Literal["all", "match", "mismatch"] = "all",
stats: Callable[..., Any] = np.mean,
rtol: float = 1e-05,
atol: float = 1e-08,
to_native: bool = True,
**kwargs: Any,
)引数 Argument
df_list(必須) A list or dict of IntoFrameT
列を比較するデータフレームのリストもしくは辞書オブジェクト。辞書がdf_nameが未指定の場合、辞書の keys をdf_nameとして使用します。df_namelist of str
表頭に表示するデータフレームの名前。['df1', 'df2']のように文字列のリストを指定してください。初期設定では、自動的にdf1, df2, df3 …と連番が割り当てられます。return_matchstr
出力に反映する変数の範囲を表す文字列。次の値から選択できます。'all'(初期設定): 全ての列を表示。'match':全てのデータフレームで dtype が一致している列のみを表示。'mismatch':少なくとも1つのデータフレームで dtype が一致していない列のみを表示。
dropnabool (compare_df_cols()のみ)
データ型dtypeの一致判定に当たり、NaNを無視するかどうか。初期設定Falseの場合、すべてのデータフレームが同名かつ同じデータ型の列を持たない限り、ミスマッチが発生したと判定されます。statsstr or function
比較に用いる記述統計量を定義する関数。np.meanなどvalues列を1次元配列として受け取って単一の数値を返す任意の関数が使用できるほか、nw.meanなど narwhals.functions モジュールで実装された関数を使用できます。初期設定はnp.meanです。
使用例 Examples
import pandas as pd
import py4stats as py4st
df1 = pd.DataFrame({'x':[1, 2, 3], 'y':[5, 4, 2], 'z':[True, False, True]})
df2 = pd.DataFrame({'x':[1, 2, 3], 'y':[5.0, 4, 2], 'z':['True', 'False', 'True']})
print(py4st.compare_df_cols([df1, df2]))
#> term df1 df2 match_dtype
#> 0 x int64 int64 True
#> 1 y int64 float64 False
#> 2 z bool object Falsereturn_match = 'mismatch' を指定すると、データフレームの中で、dtype が一致していないものがある列を返します。
print(py4st.compare_df_cols(
[df1, df2], return_match = 'mismatch'
))
#> term df1 df2 match_dtype
#> 1 y int64 float64 False
#> 2 z bool object False py4st.compare_df_stats() は数値変数の記述統計量を比較するため、異なる経路で行われたデータ処理の結果が一致しているかを検証する場合に便利です。
from palmerpenguins import load_penguins
penguins = load_penguins()
penguins2 = penguins.copy()
vars = ['flipper_length_mm', 'body_mass_g']
penguins2.loc[:, vars] = py4st.scale(penguins2.loc[:, vars])
print(
py4st.compare_df_stats([penguins, penguins2]).round(2)
)
#> term df1 df2 match_stats
#> 0 bill_depth_mm 17.15 17.15 True
#> 1 bill_length_mm 43.92 43.92 True
#> 2 body_mass_g 4201.75 0.00 False
#> 3 flipper_length_mm 200.92 -0.00 False
#> 4 year 2008.03 2008.03 True