pandasのいくつかの効率的な操作

3666 ワード

学習したpandasの操作テクニックを記録し、コードを大幅に簡素化することができます.
1.OneHot符号化
  • OneHot符号化特徴
  • を生成する.
        actionType = pd.get_dummies(df['actionType'], prefix='actionType', prefix_sep='_')
    
  • prefix OneHote符号化特徴を表すネーミングプレフィックス
  • prefix_sepは接頭辞と特徴値を接続する記号を表し、デフォルトでは下線で生成される特徴名は例えば「actionType_1」
  • である.
  • 一括選択OneHot符号化特徴
  •         df['actionType_{}'.format(column)] #column 
    

    2.タイムスタンプを標準ローカルタイムフォーマットに変換
    タイムスタンプ:1970年1月1日00:00:00から現在までの秒数
    変換操作を定義する方法
    import time
    def time_conv(x):
        timeArray=time.localtime(x)
        otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
        return otherStyleTime
    

    pandasに組み込まれたSeries形式のmapメソッドを再利用して、この操作を各行に適用します.
    df.Time = pd.to_datetime(df.Time.map(lambda x: time_conv(x)),format="%Y-%m-%d %H:%M:%S")
    

    たとえば、1503443585が2017-08-23 07:13:05に変換されます.
    3.特徴数値化
    df['province'] = df['province'].map(list(df['province'].unique()).index)
    

    フィーチャー1
    province
    フィーチャー2
    江西省
    重慶
    上海
    重慶
    上のコードで操作すると、フィーチャーセットのprovince列が
    フィーチャー1
    province
    フィーチャー2
    0
    1
    2
    1
    4.データパケット集約プロセスにおけるaggモジュールの使用
  • 内蔵標準集約関数
  • を使用
    df = DataFrame({'key1':['a','a','b','b','a'],'key2':['one','two','one','two','one'],
    'data1':np.random.randn(5),'data2':np.random.randn(5)}) 
    # dataframe 
    grouped = df[['data1','data2']].groupby(df['key1'])['data1'].agg({'key1_count':'count','data1_mean':'mean'}) 
    # key1 , key1 data1 
    # ,'count'、'mean' 
    

    標準操作関数は次のとおりです.
    count
    グループ内の非NA値の数
    sum
    非NAは和に値する
    mean
    非NA値平均
    median
    非NA値算術中位数
    std、var
    オフセットなし(分母はn-1)標準差と分散
    min、max
    非NA値の最小値と最大値
    prod
    非NA値の積
    first、last
    最初と最後の非NA値
  • カスタム集約関数
  • def func(arr):
        return arr.max() - arr.min()
    grouped = df[['data1','data2']].groupby(df['key1'])['data1'].agg({'max-min':func})
    # func key1 data1 
    # 
    

    5.applymap関数の運用
    applymapは,前述のように特徴数値化して用いたmapと類似しており,前者はDataFrame,後者はSeriesに対して例えば空の値を0に設定したfunc関数を定義する.
    def func(x):
        try:
            return float(x)
        except:
            if x == 'NaN':
                return 0
            else:
                return x
    

    applymapメソッドを使用してdataframeテーブルの各値に関数を呼び出す
    data.applymap(func)                  # data.fillna(0,inplace=True) 
    

    6.カテゴリ型の特徴と数値型の特徴を選択
    cate_columns = data.select_dtypes(include=['object']).columns
    num_columns = data.select_dtypes(exclude=['object']).columns
    

    pandasにはdataframeにselect_が内蔵されていますdtypes関数!!!
    7.列を削除する3つの方法
    del data[ ]
    del data. 
    data.drop([' '], axis=1, inplace=True) 
    data.drop([[ ]], axis=1)
    

    8.列名の変更
    df.rename(columns={'old 1':'new 1','old 2':'new 2'},inplace=True)
    

    9.グループ内ソート
    df_sorted = df.groupby('userid',as_index=False).apply(lambda x:x.sort_values('orderTime', ascending=False)) # 
        #userid Dataframe 
        #orderTime: Dataframe 
    

    10.lambdaを使用してdataframe行を巡回する
    def func(x,y):
       return x - y
    
    #df x y
    df['x-y'] =  df.apply(lambda row: func(row['x'], row['y'] ), axis=1)