pythonデータ分析-python類似sql用法(四)
21928 ワード
--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より大きい内容を検索し、テーブル全体のすべての列
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未満の内容を検索し、テーブル全体のすべての列
df[df[‘col’].isin([21.01, 23.68, 24.59])]
col列に指定された値が含まれている内容を検索し、テーブル全体のすべての列
df[-df[‘col’].isin([11,63])]
col列に複数の値が含まれていない内容を検索し、表
コードケース
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計算 forサイクルgroupby反復
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タイプを解決
コードケース
python類似sql orderソートの使い方
構文
説明
df.sort_values([‘col’], ascending=False)
col列でソート、ascending=Falseは
col列でソート、ascending=Trueは
インデックスに基づいてソートされます.ascending=Falseは
コードケース
python類似sql Distinct脱重用法
構文
説明
df.drop_duplicates(subset=[‘col’], keep=‘first’, inplace=True)
ある列に基づいてdataframeを除算する
パラメータを含める
パラメータ
説明
subset
選択した列に対してdistinctを行い、デフォルトはすべての列です.
keep
値オプション{'first','last',False}は、重複要素の最初の、最後の、またはすべて削除されます.
inplace
デフォルトはFalseで、新しいdataframeが返されます.Trueの場合は、元のDataframeに戻ります.
コードケース
文書ディレクトリ
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データを選択する
コードケース
# 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
# 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