16.データフレーム適用-関数マッピング(マッピング)

22642 ワード

1.マッピング関数



関数を
  • データフレームにマッピングする方法
  • データのパケット演算
  • データフレームをマージする方法や、構造をさまざまな形で変更する方法など
    関数マッピングとは?
    シリーズまたはデータフレーム内の各要素を特定の関数に1つずつ対応させるプロセス.
    自分で作成した関数(lambda関数を含む)を適用できるため、処理しにくい複雑な演算をデータフレームなどのpandasオブジェクトに適用できます.

    1-1. 関数を単一の要素にマッピング


    apply()メソッドをシリーズオブジェクトに適用すると、パラメータとして渡されたマッピング関数にシリーズ内の各要素を入力し、関数の戻り値を返します.

  • 関数をシリーズ内の要素:Seriseオブジェクトにマッピングします.apply(マッピング関数)
  • import seaborn as sns
    
    def add_10(n):
        return n+10
    
    def add_two_obj(a,b):
        return a+b
    
    titanic = sns.load_dataset('titanic')
    
    df = titanic.loc[:,['age','fare']]
    df['ten']=10
    print(df.head())
    
    sr1 = df['age'].apply(add_10)
    print(sr1.head())
    
    # 시리즈 객체와 숫자에 적용: 2개의 인수(시리즈+숫자)
    sr2 =df['age'].apply(add_two_obj,b=10) # a=df['age']의 모든 원소, b=10
    print(sr2.head())
    
    # lambda 함수 활용 : 시리즈 객체에 적용
    sr3 =df['age'].apply(lambda x = add_10(x)) # x = df['age']
    print(sr3.head()
    
    
    データフレームでapplymap()メソッドを使用すると、マッピング関数にデータフレーム内の各要素が挿入され、戻り値が返されます.

  • 関数をデータフレームにマップします.データフレームオブジェクトです.applymap()
  • import seaborn as sns
    
    titanic = sns.load_dataset('titanic')
    
    df = titanic.loc[:,['age','fare']]
    
    print(df.head())
    print('\n')
    
    def add_10(n):
        return n+10
    
    
    df_map = df.applymap(add_10)
    print(df_map.head())
    
    

    1-2. 関数をシリーズオブジェクトにマッピングする


    関数を
  • データフレームの各列にマッピング
    apply(axis=0)メソッドを適用すると、すべてのカラムが個別に分離され、各カラムがマッピング関数のパラメータとして渡されます.
  • 関数を
  • データフレームの列:DataFrameオブジェクトにマッピングします.apply(マッピング関数、axis=0)
  • ex1)
    import seaborn as sns
    
    titanic = sns.load_dataset('titanic')
    
    df = titanic.loc[:,['age','fare']]
    
    print(df.head())
    print('\n')
    
    def missing_value(series):
        return series.isnull()
    
    result = df.apply(missing_value,axis=0)
    print(result.head())
    
    ex2)
    import seaborn as sns
    
    titanic = sns.load_dataset('titanic')
    df = titanic.loc[:,['age','fare']]
    
    def min_max(x):
        return x.max()-x.min()
    
    
    result = df.apply(min_max,axis=0) # default axis=0
    
    print(result)
    print(type(result))
    
    関数を
  • データフレームの各行
  • にマッピングする

  • 関数をデータフレームにマッピングする行:Dataframeオブジェクト.アプリケーション(axis=1)
  • 
    import seaborn as sns
    
    titanic = sns.load_dataset('titanic')
    
    df = titanic.loc[:,['age','fare']]
    df['ten']=10
    
    def add_two_obj(a,b):
        return a+b
    
    print(df.head())
    
    
    df['add'] = df.apply(lambda x : add_two_obj(x['age'],x['ten']),axis=1)
    
    print(df.head())

    1-2. 関数をデータフレームオブジェクトにマッピングする

  • データフレームオブジェクト

  • 関数をデータフレームオブジェクトにマップする:DataFrameオブジェクト.pipe(マッピング関数)
  • from os import add_dll_directory
    import seaborn as sns
    
    titanic = sns.load_dataset('titanic')
    df = titanic.loc[:,['age','fare']]
    
    df['ten']=10
    
    def max_min(x):
        return x.max()-x.min()
    
    def add_10(x):
        return x+10
    
    def add_two_obj(a,b):
        return a+b
    
    # 각 열의  NaN 찾기 - 데이터프레임을 전달하면 데이터프레임 반환
    def missing_value(x):
        return x.isnull()
    
    
    # 각 열의  NaN 개수 반환 - 데이터프레임을 전달하면 시리즈 전환
    def missing_count(x):
        return missing_value(x).sum()
    
    
    # 데이터프레임의 총 NaN 개수 - 데이터프레임을 전달하면 값 반환
    def total_number_missing(x):
        return missing_count(x).sum()
    
    print('원본','\n',df.head())
    
    # 데이터프레임의 행 매핑
    df['added'] = df.apply(lambda x : add_two_obj(x['age'],x['ten']),axis=1)
    print(df.head())
    
    # 데이터프레임의 열 매핑
    result0 = df.apply(max_min,axis=0)
    print(result0)
    
    # 데이터프레임 원소에 함수매핑
    result1 = df.applymap(add_10)
    print(result1.head())
    
    # 데이터프레임 객체에 함수매핑
    result_df = df.pipe(missing_value)
    print(result_df.head())
    print(type(result_df))
    
    # 데이터프레임 객체에 함수매핑
    result_series = df.pipe(total_number_missing)
    print(result_series)
    print(type(result_series))