「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
Pandas(パンダス)は数表の形式で保存されたデータを効率的に処理する機能を収録したライブラリ
操作するためのデータ構造と演算を提供
(Pythonから簡単に利用できるSQLの代替)
>pip install pandas
>>>import pandas as pd
Series型は、一次元の配列のオブジェクト
>>>pd.Series([3,7,10,13]) 0 3 1 7 2 10 3 13 dtype: int64
NumPyの配列から
>>>numpy_array = np.array([3,7,10,13]) >>>pd.Series(numpy_array) 0 3 1 7 2 10 3 13 dtype: int64
>>>ss=pd.Series([3,7,10,13])
>>>ss2=ss
>>>ss2=ss.copy()
>>>x=pd.Series([3,7,10,13])
>>>x[1] 7
>>>x[1:3]
>>>x[np.array([1,2])]
>>>x>=5 0 False 1 True 2 True 3 True dtype: bool
>>>x[x>=5] 1 7 2 10 3 13 dtype: int64
※ インデックスにtrue, falseのSeriesが指定され抽出される。
配列の取り出し
>>>x.values array([ 3, 7, 10, 13], dtype=int64)
DataFrame?型は、テーブル形式のデータ構造
>>> pd.DataFrame({ ... 'xxx': ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff'], # 長さ: 6 ... 'yyy': [20, 34, 50, 12, 62, 22], # 長さ: 6 ... 'zzz':['AAA', 'BBB', 'CCC', 'DDD', 'EEE', 'FFF'] # 長さ: 6 ... }) xxx yyy zzz 0 aaa 20 AAA 1 bbb 34 BBB 2 ccc 50 CCC 3 ddd 12 DDD 4 eee 62 EEE 5 fff 22 FFF
NumPyの行列(2次配列)から → NP ⇔ DF型変換
>>>df = pd.read_csv('hoge.csv')
>!pip install openpyxl
>>>df = pd.read_excel('hoge.xlsx')
>>> df=pd.DataFrame({ ... 'xxx': ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff'], # 長さ: 6 ... 'yyy': [20, 34, 50, 12, 62, 22], # 長さ: 6 ... 'zzz':['AAA', 'BBB', 'CCC', 'DDD', 'EEE', 'FFF'] # 長さ: 6 ... })
>>>df2=df
>>>df2=df.copy()
→ 先頭・後尾
>>> df=pd.DataFrame({ ... 'xxx': ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff'], # 長さ: 6 ... 'yyy': [20, 34, 50, 12, 62, 22], # 長さ: 6 ... 'zzz':['AAA', 'BBB', 'CCC', 'DDD', 'EEE', 'FFF'] # 長さ: 6 ... }) >>> df xxx yyy zzz 0 aaa 20 AAA 1 bbb 34 BBB 2 ccc 50 CCC 3 ddd 12 DDD 4 eee 62 EEE 5 fff 22 FFF
>>>df.head()
>>>df.head(2)
>>>df.tail()
>>>df.tail(2)
>>>df.iloc[1]
>>>df.iloc[:,1]
>>>df.iloc[1,0] 'bbb'
>df.loc[1,'xxx'] 'bbb'
>>>df.iloc[2:4]
>>>df.iloc[:,1]
>>>x[np.array([1,2])]
>>>df.iloc[np.array([2,3])]
>>>df.iloc[np.array([2,3]), np.array([1,2])]
>>>df.yyy >= 30
>>>df[df.yyy >= 30]
※ インデックスにname=yyyのtrue, falseのSeriesが指定され抽出される。
m行n列の二次元行列が取得できる。
>>>df.values
>>>df.iloc[2] xxx ccc yyy 50 zzz CCC Name: 2, dtype: object
>>>df.iloc[[2]] xxx yyy zzz 2 ccc 50 CCC
>>>df.loc[:,'yyy'] 0 20 1 34 2 50 3 12 4 62 5 22 Name: yyy, dtype: int64
>>>df.loc[:,['yyy']] yyy 0 20 1 34 2 50 3 12 4 62 5 22
>>>df[['yyy']] yyy 0 20 1 34 2 50 3 12 4 62 5 22
>>>row=pd.DataFrame({ 'xxx': 'ggg', 'yyy': [45], 'zzz': 'GGG'}) >>> df=pd.concat([df,row],axis=0) >>> df xxx yyy zzz 0 aaa 20 AAA 1 bbb 34 BBB 2 ccc 50 CCC 3 ddd 12 DDD 4 eee 62 EEE 5 fff 22 FFF 0 ggg 45 GGG
>>>df.index=np.arange(len(df)) >>> df xxx yyy zzz 0 aaa 20 AAA 1 bbb 34 BBB 2 ccc 50 CCC 3 ddd 12 DDD 4 eee 62 EEE 5 fff 22 FFF 6 ggg 45 GGG
>>>df['XXX']=['X1','X2','X3','X4','X5','X6'] >>>df xxx yyy zzz XXX 0 aaa 20 AAA X1 1 bbb 34 BBB X2 2 ccc 50 CCC X3 3 ddd 12 DDD X4 4 eee 62 EEE X5 5 fff 22 FFF X6
>>>col=pd.DataFrame({'YYY':['Y1','Y2','Y3','Y4','Y5','Y6']}) >>>df=pd.concat([df,col],axis=1) >>>df xxx yyy zzz XXX YYY 0 aaa 20 AAA X1 Y1 1 bbb 34 BBB X2 Y2 2 ccc 50 CCC X3 Y3 3 ddd 12 DDD X4 Y4 4 eee 62 EEE X5 Y5 5 fff 22 FFF X6 Y6
>>>df=df.drop(2,axis=0) >>> df xxx yyy zzz XXX YYY 0 aaa 20 AAA X1 Y1 1 bbb 34 BBB X2 Y2 3 ddd 12 DDD X4 Y4 4 eee 62 EEE X5 Y5 5 fff 22 FFF X6 Y6
>>>df=df.drop('yyy',axis=1) >>>df xxx zzz XXX YYY 0 aaa AAA X1 Y1 1 bbb BBB X2 Y2 3 ddd DDD X4 Y4 4 eee EEE X5 Y5 5 fff FFF X6 Y6
>>>df.columns=['AAA','BBB','CCC','DDD'] >>>df AAA BBB CCC DDD 0 aaa AAA X1 Y1 1 bbb BBB X2 Y2 3 ddd DDD X4 Y4 4 eee EEE X5 Y5 5 fff FFF X6 Y6
>>>df=df.rename(columns={'DDD': 'XXX'}, index={5: 'hoge'}) >>>df AAA BBB CCC XXX 0 aaa AAA X1 Y1 1 bbb BBB X2 Y2 3 ddd DDD X4 Y4 4 eee EEE X5 Y5 hoge fff FFF X6 Y6
列値を%に単位変更する(100倍する)などの一括変更。
>>>pd.DataFrame({ ... 'xxx': ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff'], # 長さ: 6 ... 'yyy': [20, 34, 50, 12, 62, 22], # 長さ: 6 ... 'zzz':['AAA', 'BBB', 'CCC', 'DDD', 'EEE', 'FFF'] # 長さ: 6 ... }) >>>df.iloc[:,1:2] = df.iloc[:,1:2] * 100 xxx yyy zzz 0 aaa 2000 AAA 1 bbb 3400 BBB 2 ccc 5000 CCC 3 ddd 1200 DDD 4 eee 6200 EEE 5 fff 2200 FFF 6 ggg 4500 GGG
df=df.transpose()
inplace=Trueを設定すると、元を変更する。
>>>df.drop('yyy',axis=1,inplace=True) >>>df
※ drop、rename、dropnaなどメソッドに指定できる。
>>>df = pd.DataFrame(pd.Series([3,7,10,13])) >>>df
>>>np_arr=np.array([[1,2,3],[4,5,6]])
>>>df=pd.DataFrame(np_arr,columns=['a','b','c'])
>>>np_arr=np.array(df)
>>>np_arr=df.values
>>>df=pd.DataFrame({ ... '0': ['00', '01', '02', '03', '04', '05', '06', '07', '08', '09'], # 長さ: 10 ... '1': ['10', '11', '12', '13', '14', '15', '16', '17', '18', '19'], # 長さ: 10 ... '2': ['20', '21', '22', '23', '24', '25', '26', '27', '28', '29'] # 長さ: 10 }) >>>df=df.astype('int')
>>>ss_sum = df.iloc[:,[m:n]].sum(axis=0) >>>df_sum = pd.DataFrame(ss_sum) >>>df_sum = df_sum.rename(columns={0: 'sum'})
>>>df=pd.concat([df,df_sum.transpose()],axis=0) >>>df
>>>ss_sum = df.iloc[:,[1,2]].sum(axis=1) >>>df_sum = pd.DataFrame(ss_sum) >>>df_sum = df_sum.rename(columns={0: 'sum'})
>>>df=pd.concat([df,df_sum],axis=1)
基本的な補完処理はコチラ
>>>df['列名'] = df['列名'].str.replace('.*(置換前).*', '置換後', regex=True)
list_col1 = [i.split(",")[1].split(".")[0].strip() for i in df["col1"]] df["col1"] = pd.Series(list_col1) nparr_col1 = df["col1"].unique() for cell in nparr_col1: df['col1'] = df['col1'].str.replace('.*({0}\.).*'.format(cell), cell, regex=True)
>>>df['補完対象列名'] = df.groupby('グループ化列名')['補完対象列名'].transform(lambda d: d.fillna(d.mean()))
>>>df.describe()
>>>df.describe().astype(int)
説明変数の表(DataFrame?)から相関係数行列を生成。
>>>df.corr()
※ ヒートマップで可視化する方法はコチラ。
説明変数の表(DataFrame?)を散布図行列として可視化。
>>>X = (df.iloc[:, m:n] - df.iloc[:, m:n].mean()) / df.iloc[:, m:n].std() >>>X.describe()
※ 平均が ≒ 0、標準偏差 ≒ 1 になればOK。
pd.get_dummies(df['カテゴリ列の列名'])
df_dummy = pd.get_dummies(df['カテゴリ列の列名']) df = pd.concat([df, df_dummy], axis=1) df.head()