pandasのいくつかの効率的な操作
3666 ワード
学習したpandasの操作テクニックを記録し、コードを大幅に簡素化することができます.
1.OneHot符号化 OneHot符号化特徴 を生成する. prefix OneHote符号化特徴を表すネーミングプレフィックス prefix_sepは接頭辞と特徴値を接続する記号を表し、デフォルトでは下線で生成される特徴名は例えば「actionType_1」 である.一括選択OneHot符号化特徴
2.タイムスタンプを標準ローカルタイムフォーマットに変換
タイムスタンプ:1970年1月1日00:00:00から現在までの秒数
変換操作を定義する方法
pandasに組み込まれたSeries形式のmapメソッドを再利用して、この操作を各行に適用します.
たとえば、1503443585が2017-08-23 07:13:05に変換されます.
3.特徴数値化
フィーチャー1
province
フィーチャー2
江西省
重慶
上海
重慶
上のコードで操作すると、フィーチャーセットのprovince列が
フィーチャー1
province
フィーチャー2
0
1
2
1
4.データパケット集約プロセスにおけるaggモジュールの使用内蔵標準集約関数 を使用
標準操作関数は次のとおりです.
count
グループ内の非NA値の数
sum
非NAは和に値する
mean
非NA値平均
median
非NA値算術中位数
std、var
オフセットなし(分母はn-1)標準差と分散
min、max
非NA値の最小値と最大値
prod
非NA値の積
first、last
最初と最後の非NA値カスタム集約関数
5.applymap関数の運用
applymapは,前述のように特徴数値化して用いたmapと類似しており,前者はDataFrame,後者はSeriesに対して例えば空の値を0に設定したfunc関数を定義する.
applymapメソッドを使用してdataframeテーブルの各値に関数を呼び出す
6.カテゴリ型の特徴と数値型の特徴を選択
pandasにはdataframeにselect_が内蔵されていますdtypes関数!!!
7.列を削除する3つの方法
8.列名の変更
9.グループ内ソート
10.lambdaを使用してdataframe行を巡回する
1.OneHot符号化
actionType = pd.get_dummies(df['actionType'], prefix='actionType', prefix_sep='_')
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)