pythonデータ分析-python類似sql用法(四)


--python sql pandasはデータ処理に豊富で効率的な関数を持っています.データを整理し、整理した後、元のDataFrameにすぎません.pythonもSQLのようにあるいはexcelの中のvoolkupのようにデータを統合することができて、excelの中のピボットテーブルあるいはsql groupbyのようにデータのピボットの組み合わせを行うことができて、excelの検索機能あるいはsqlの中のwhere機能のようにデータのフィルタリングを行うことができます.
文書ディレクトリ
  • python類似sql where用法またはexcel検索用法
  • python類似sql Group byパケット用法
  • python類似sql join関連用法
  • python類似sql orderソート用法
  • python類似sql Distinct脱重用法
  • python類似sql where用法またはexcel検索用法
    pythonはwhere用法のcol=a、col<>a、col=a and col=b、col=a or col=b、col in(a,b,c)、col not in(a,b,c)に類似する
    構文
    説明
    df[‘col’]==‘Female’
    検索dfテーブルcol列の内容がFemaleに等しい内容=の使い方
    df[‘col’]!=11
    検索dfテーブルcol列の内容が11に等しくない内容<>の使い方
    df[df[‘col’]==‘Female’]
    dfテーブルのcol列の単一条件がFemaleに等しい内容を検索し、テーブル全体のすべての列を返します.
    df[(df[‘col’]==‘Female’)&(df[‘col2’]>0)]
    dfテーブルのcol列がFemaleに等しく、col 2列が0より大きい内容を検索し、テーブル全体のすべての列andの使用法を返します.
    df[‘col’].between(a,b)
    col列のa=2,b=8は,2-8の間の数を返す.
    df[(df[‘col’]>=10)|(df[‘col2’]<50)]
    dfテーブルのcol列が10以下またはcol 2列が50未満の内容を検索し、テーブル全体のすべての列orの使用方法を返します.
    df[df[‘col’].isin([21.01, 23.68, 24.59])]
    col列に指定された値が含まれている内容を検索し、テーブル全体のすべての列inの使用方法を返します.
    df[-df[‘col’].isin([11,63])]
    col列に複数の値が含まれていない内容を検索し、表not inの使用法を返します.
    コードケース
    import pandas as pd
    data={'a':[1,2,3,4,3,2,6],
          'b':[43,23,52,23,11,63,83],
          'c':['true','fales','true','true','fales','fales','true']}
    data=pd.DataFrame(data)#    df 
    Out[33]: 
       a   b      c
    0  1  43   true
    1  2  23  fales
    2  3  52   true
    3  4  23   true
    4  3  11  fales
    5  2  63  fales
    6  6  83   true
    
    #  b       30    
    data[data['b']>=30] 
    Out[34]: 
       a   b      c
    0  1  43   true
    2  3  52   true
    5  2  63  fales
    6  6  83   true
     #  b     30  a   5    
    data[(data['b']>=30)&(data['a']<5)]
    Out[35]: 
       a   b      c
    0  1  43   true
    2  3  52   true
    5  2  63  fales
    #  b    11 63    ,  `-`     
    data[-data['b'].isin([11,63])]
    Out[36]: 
       a   b      c
    0  1  43   true
    1  2  23  fales
    2  3  52   true
    3  4  23   true
    6  6  83   true
    

    python類似sql Group byパケット使用法
    グループは一般的に合計関数(Aggregate functions)と組み合わせて使用されます.例えば、count、avgなどです.Pandasの合計関数に対するサポートは限られており、countとsize関数がSQLのcountを実現している.
    構文
    説明
    df.groupby(‘sex’).size()
    フィールドsex単列をグループ化し、sexフィールドカウントのみを表示
    df.groupby(‘sex’)[‘tip’].count()
    フィールドsex単列をグループ化しtipフィールドカウントを計算する
    df.groupby(‘sex’).count()
    フィールドsex単列に基づいてパケット計算を行い、すべてのフィールドカウントを示す
    df.groupby(‘sex’).agg({‘tip’:np.max,‘total_bill’:np.sum})
    フィールドsexに基づいてグループ化し、tip最大値、フィールドtotal_をそれぞれ求めるbill加算値
    df.groupby(‘tip’).agg({‘sex’: pd.Series.nunique})
    tipフィールドをリセットしsexフィールドでカウント
    pd.pivot_table(df,index=col1,columns=col2,values=[col2,col3], aggfunc=max)
    カラムcol 1でグループ化し、col 2とcol 3の最大値を計算するデータピボットテーブルを作成します.
    pythonのgroupも反復をサポートし、df全体をループしてグループ化してから加工するのによく使われています.
    構文
    説明
    for x in df.groupby(‘col’):
    ループ文はdfテーブルをcol列でグループ化し、複数のtupleを返し、x[1]は返したdfデータを選択する
    for x in df.groupby([‘col’,‘col2’]):
    ループ文はdfテーブルをcol、col 2列でグループ化し、複数のtupleを返し、x[1]返されたdfデータを選択する
    コードケース
  • 直接groupby計算
  • # c       a,b   
    data.groupby('c').sum() 
    
    Out[37]: 
            a    b
    c             
    fales   7   97
    true   14  201
    
    # c     a   
    data.groupby('c')['a'].sum()
    Out[38]: 
    c
    fales     7
    true     14
    
  • forサイクルgroupby反復
  • # data c   ,         df
    for x in data.groupby('c'):
        print(x[1])
    
    Out[40]:
       a   b      c
    1  2  23  fales
    4  3  11  fales
    5  2  63  fales
       a   b     c
    0  1  43  true
    2  3  52  true
    3  4  23  true
    6  6  83  true
    
    

    python類似sql join関連用法
    構文
    説明
    pd.merge(a,b,how=‘left’,left_on=‘sex’,right_on=‘sex’)
    on指定の列はjoin Pandasをしてleft、right、inner、outerの4種類のjoin方を満たす
    pd.merge(a,b,how=‘left’,on=[‘a1’,‘b1’,‘c1’])
    on=同じ複数のカラムが必要であることを指定し、少なくとも3つのカラムをjoinして一致を満たす
    pd.merge(a,b,left_index=True,right_index=True)
    インデックスに基づいてleft_をマージindex or right_index、一対のマルチbooleanタイプを解決
    コードケース
    data1={'d':[7,44,1,44,31,42,3],
          'b':[43,23,52,23,11,63,83],
          'c':['true','fales','true','true','fales','fales','true']}
    data1=pd.DataFrame(data1)#        data1,data     
    
    Out[52]: 
        d   b      c
    0   7  43   true
    1  44  23  fales
    2   1  52   true
    3  44  23   true
    4  31  11  fales
    5  42  63  fales
    6   3  83   true
    
    pd.merge(data,data1,how='inner',left_on='a',right_on='d')
    # data a  data1 d        
    Out[55]: 
       a  b_x    c_x  d  b_y   c_y
    0  1   43   true  1   52  true
    1  3   52   true  3   83  true
    2  3   11  fales  3   83  true
    

    python類似sql orderソートの使い方
    構文
    説明
    df.sort_values([‘col’], ascending=False)
    col列でソート、ascending=Falseは df.sort_values([‘col’], ascending=True)
    col列でソート、ascending=Trueは df.sort_index(ascending=False)
    インデックスに基づいてソートされます.ascending=Falseは です.
    コードケース
    data.sort_values(['a'],ascending=[True]) a     
    
    Out[56]: 
       a   b      c
    0  1  43   true
    1  2  23  fales
    5  2  63  fales
    2  3  52   true
    4  3  11  fales
    3  4  23   true
    6  6  83   true
    

    python類似sql Distinct脱重用法
    構文
    説明
    df.drop_duplicates(subset=[‘col’], keep=‘first’, inplace=True)
    ある列に基づいてdataframeを除算する
    パラメータを含める
    パラメータ
    説明
    subset
    選択した列に対してdistinctを行い、デフォルトはすべての列です.
    keep
    値オプション{'first','last',False}は、重複要素の最初の、最後の、またはすべて削除されます.
    inplace
    デフォルトはFalseで、新しいdataframeが返されます.Trueの場合は、元のDataframeに戻ります.
    コードケース
    data.drop_duplicates(subset=['a'],keep='first',inplace=True)
    # data a       ,     
    Out[59]: 
       a   b      c
    0  1  43   true
    1  2  23  fales
    2  3  52   true
    3  4  23   true
    6  6  83   true