数値の多次元配列を扱えるPythonライブラリ
my_1darray = np.array([1, 2, 3, 5, 7])
my_2darray = np.array([
[1,2],
[3,5],
[8,13]
])
my_3darray = np.array([
[[0,0,0],[0,0,0],[0,0,0]],
[[128,128,128],[128,128,128],[128,128,128]],
[[256,256,256],[256,256,256],[256,256,256]]
])
| data[:,2] | data[1] | data[:,[0,2]] | data[1:2,1:2] |
|---|---|---|---|
![]() | ![]() | ![]() | ![]() |
💡32bitsで8ビット4つの演算が並列に一度にできる
💡64bitsの飽和加算命令だと、1回で8ビット8個の加算ができる
多次元配列にmin/max/mean/sumなどの演算を行える
nd_a.min(axis=1)
nd_a.max(axis=1)
nd_a.mean(axis=1)
nd_a.sum(axis=1)
nd_a.min()
nd_a.max()
nd_a.mean()
nd_a.sum()
nd_a.min(axis=0)
nd_a.max(axis=0)
nd_a.mean(axis=0)
nd_a.sum(axis=0)
nd_a_bool = nd_a < 4
| 4 | False |
|---|---|
| 6 | False |
| 1 | True |
| 3 | True |
| 2 | True |
| 5 | False |
| 2 | True |
| 6 | False |
nd_a[nd_a_bool]
| 1 |
|---|
| 3 |
| 2 |
| 2 |
b = np.array([1,2,3,4,5,6,7,8])
b_odd = np.mod(b, 2) == 1
b_even = ~b_odd
b[b_even] = b[b_even] / 2
b[b_odd] = b[b_odd] * 3 + 1
統計目的の数値計算ライブラリだったため、数値しか扱えなかった
文字列なども扱えるようにしたい!
DataFrameオブジェクトを用いて効率的にデータ分析を行うためのPythonライブラリ
df.apply().drop() <- 無駄な演算が走る
df.drop().apply() <- 先に情報を落として計算する
💡最適化される体系もあるため、基本的にはメソッドチェーンを活用したい
DataFrameは全データを抱え込んでいる
基本的にはnumpyオブジェクト
APIリファレンス↗ を眺めて知っておく
組み込みの関数を使う
sr.apply(lambda x: x if x else 0)
sr.fillna(0)
複数のカラムを選択
df[['username', 'email']]
= df.loc[:, ['username', 'email']]
区間のカラムを選択
df.loc[:, 'username':'age']
行選択
df.loc[['100','200','400']]
20歳未満の行の、名前とメールアドレス列を取得
df.loc[df['age']<20, ['username', 'email']]
国が日本と中国の行のみ選択
df[(df['country'] == 'Japan') | (df['country'] == 'China')]
mapと辞書でtypoを一括置き換え
mapping_dict = {
'upple': 'apple',
'epple': 'apple',
'bununu': 'banana',
'binini': 'banana'
}
buscket['fruits'] = buscket['fruits'].map(mapping_dict)
組み込み関数
buscket['fruits'].value_counts()
apple 49997
banana 3
Name: fruits, dtype: int64
小さい順に並べる
buscket['fruits'].value_counts().sort_index(ascending=True)
price列の"300Yen"文字列を300という数値に
buscket['price'] = buscket['price'].str.replace('Yen', '').astype(int)