「.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の配列から
>>>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 >= 5 0 False 1 True 2 True 3 True dtype: bool
>>>x[x>=5]
※ インデックスに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')>>>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]
>>>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()
※ 可視化する方法はコチラ。
>>>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()