「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
数表の形式で保存されたデータを効率的に処理する機能を収録したライブラリ
操作するためのデータ構造と演算を提供
(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_array = np.array([3,7,10,13]) >>>pd.Series(numpy_array) 0 3 1 7 2 10 3 13 dtype: int64
>>>x=pd.Series([3,7,10,13])
>>>x[1] 7
>>>x >= 5 0 False 1 True 2 True 3 True dtype: bool
>>>x[x>=5]
※ インデックスにtrue, falseの配列が指定され抽出される。
配列の取り出し
>>>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
>>>df = pd.read_csv('hoge.csv')
>!pip install openpyxl
>>>df = pd.read_excel('hoge.xlsx')
>>>df=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,0] 'bbb'
>df.loc[1,'xxx'] 'bbb'
>>>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['@@@']=['@1','@2','@3','@4','@5','@6','@7'] >>>df xxx yyy zzz @@@ 0 aaa 20 AAA @1 1 bbb 34 BBB @2 2 ccc 50 CCC @3 3 ddd 12 DDD @4 4 eee 62 EEE @5 5 fff 22 FFF @6 6 ggg 45 GGG @7
>>>col=pd.DataFrame({'@@@':['@1','@2','@3','@4','@5','@6','@7']}) >>>df=pd.concat([df,col],axis=1) >>>df xxx yyy zzz @@@ 0 aaa 20 AAA @1 1 bbb 34 BBB @2 2 ccc 50 CCC @3 3 ddd 12 DDD @4 4 eee 62 EEE @5 5 fff 22 FFF @6 6 ggg 45 GGG @7
>>>df=df.drop(2,axis=0) >>> df xxx yyy zzz @@@ 0 aaa 20 AAA @1 1 bbb 34 BBB @2 3 ddd 12 DDD @4 4 eee 62 EEE @5 5 fff 22 FFF @6 6 ggg 45 GGG @7
>>>df=df.drop('yyy',axis=1) >>>df xxx zzz @@@ 0 aaa AAA @1 1 bbb BBB @2 3 ddd DDD @4 4 eee EEE @5 5 fff FFF @6 6 ggg GGG @7
>>>df.columns=['XXX','YYY','ZZZ'] >>>df XXX YYY ZZZ 0 aaa AAA @1 1 bbb BBB @2 3 ddd DDD @4 4 eee EEE @5 5 fff FFF @6 6 ggg GGG @7
列値を%に変更する(100倍する)などの単位変更。
>>>df.iloc[:,m:n] = df.iloc[:,m:n] * 100 >>>df=df.astype(int) # 小数点以下を切り捨て
df=df.transpose()
NP初期化
>>>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['列名'] = 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_sum = df.iloc[:,m:n].sum(axis=0) df_sum.columns = ['Sum']
df=pd.concat([df,df_sum.transpose()],axis=0)
df_sum = df.iloc[:,m:n].sum(axis=1) df_sum.columns = ['Sum']
df=pd.concat([df,df_sum],axis=1)
>>>df.describe()
>>>df.describe().astype(int)
>>>df.corr()
※ 可視化する方法はコチラ。