最終投稿日:2022年6月18日
ライブラリ(Pandas)
Pandas ライブラリ
● CSV データの読込み
data = pd.read_csv('hoge.csv', index_col=0, header=0)
data = pd.table('hoge.csv', index_col=0) ※read_csv との違いは、カンマ区切りかタブ区切りかです
data = pd.table('hoge.csv', index_col=0) ※read_csv との違いは、カンマ区切りかタブ区切りかです
○ 引数
| index_col | indexをどのカラムにするのか指定します。指定しない場合(None)はpandasによって自動的にindexが追加される |
| header | ヘッダ行がある場合指定する(1行目は0)。指定した数字より上の行は読込まれない。※無い場合は、header=None |
| sep か delimiter | 区切り文字を設定できる |
| usecols | 読込む列番号をリストで指定する。タイトルの文字列でも大丈夫 |
| encoding | 文字コード。encoding='SHIFT-JIS' ※UTF-8 は、省略できる |
○ 内容確認メソッド
| data.index | RangeIndex(start=0, stop=20000, step=1) ※インデックス情報 |
| data.columns | Index(['height', 'weight', 'label'], dtype='object') ※各列のフィールド名情報等 |
| data.shape | (20000, 3) ※列と行の数を返す |
| data.head(5) | データの始めから指定インデックス分出力する |
| data.tail(5) | データの終わりから指定インデックス分出力する |
| data['hoge'] | 列をスライスする(hoge カラムのみ抽出できる) |
| data[['hoge','foo']] | 複数の列をスライスする場合は2次元配列にする |
● テーブルの結合
カラム[hoge][foo][bar]からなるデータの場合
| t1 = data['hoge'] | |
| t2 = data['bar'] | |
| pd.concat([t1, t2], axis=0) | データを縦に結合する(ただしタイトル名を同じにする必要あり)だからこの例はエラー。。 |
| pd.concat([t1, t2], axis=1) | データを横に結合する(要するに列が[hoge][bar]となる) |
● 変換
通常の配列を pandas 形式データへ変換(実際は新たなオブジェクトを返却)する
import pandas as pd
hoge = [1, 2, 3]
new_data = pd.Series(hoge) ※1次元配列の場合 hoge = [ [1, 2, 3], [4, 5, 6] ] ※2次元配列の場合(各列が各フィールドとなる)
new_data = pd.DataFrame(hoge) pandas で作成されたデータを通常の配列へ変換(実際は新たな list を返却)する
new_list = new_data.values.tolist()
import pandas as pd
hoge = [1, 2, 3]
new_data = pd.Series(hoge) ※1次元配列の場合 hoge = [ [1, 2, 3], [4, 5, 6] ] ※2次元配列の場合(各列が各フィールドとなる)
new_data = pd.DataFrame(hoge) pandas で作成されたデータを通常の配列へ変換(実際は新たな list を返却)する
new_list = new_data.values.tolist()
● ループ処理
CSVサンプル)
hoge,foo,bar
A,1,あ
B,2,い
C,3,う
hoge,foo,bar
A,1,あ
B,2,い
C,3,う
○ 列単位で取り出す
mr = pd.read_csv('hoge.csv', header=0)
for column_name, item in mr.iteritems():
print(column_name) ※最初の列名「hoge」を取得できる
print(item[0]) ※最初の列の0番目の値「A」を取得できる
※item 自体 for で回すと A,B,C と順に取得できる
for column_name, item in mr.iteritems():
print(column_name) ※最初の列名「hoge」を取得できる
print(item[0]) ※最初の列の0番目の値「A」を取得できる
※item 自体 for で回すと A,B,C と順に取得できる
○ 1行単位で取り出す
mr = pd.read_csv('hoge.csv', header=0)
for index, row in mr.iterrows():
print(index) ※最初の行「0」を取得できる
print(row[0]) ※最初の行の0番目の値「A」を取得できる
※row 自体 for で回すと A,1,あ と順に取得できる
【メモ】
for index, row in mr.iterrows():
print(index) ※最初の行「0」を取得できる
print(row[0]) ※最初の行の0番目の値「A」を取得できる
※row 自体 for で回すと A,1,あ と順に取得できる
値を参照する際に上記2つの例では、item[0] row[0] と参照していたが、
item.ix[0] row.ix[0] としても取得できる。
これは、より詳細な抽出指定方法で、以下の3種類あります。
ix 番号、名前両方で指定可能
iloc 番号の指定のみに対応
loc 名前のみ指定のみに対応
item.ix[0] row.ix[0] としても取得できる。
これは、より詳細な抽出指定方法で、以下の3種類あります。
ix 番号、名前両方で指定可能
iloc 番号の指定のみに対応
loc 名前のみ指定のみに対応
○ 行、列の各値単位で取り出し、自分で作成した関数や Python の組込み関数を適用する
apply メソッドを使います。
mr = pd.read_csv('hoge.csv', header=0)
d = {'あ':1, 'い':2, 'う':3}
fn = lambda x: d.get(x) if d.get(str(x)) != None else x ※辞書型に登録があれば、それに置き換える
hoge = data['bar'].apply(fc) ※CSV の bar の列に対してループ処理する
print(hoge) 【メモ】
d = {'あ':1, 'い':2, 'う':3}
fn = lambda x: d.get(x) if d.get(str(x)) != None else x ※辞書型に登録があれば、それに置き換える
hoge = data['bar'].apply(fc) ※CSV の bar の列に対してループ処理する
print(hoge) 【メモ】
1行か1列で取り出したデータをループ処理する
apply メソッドのサンプルだが、正確には pandas のデータ型によりメソッドが違います。
Series の各要素に適用 : map()
DataFrame の各要素に適用 : applymap()
DataFrame、 Series の各行・各列に適用 : apply()
apply メソッドのサンプルだが、正確には pandas のデータ型によりメソッドが違います。
Series の各要素に適用 : map()
DataFrame の各要素に適用 : applymap()
DataFrame、 Series の各行・各列に適用 : apply()
色々なデータを操作
● pandaデータ作成
df = pd.DataFrame([[1,2,3],[10,20,30],[100,200,300],[1000,2000,3000]]
, index=['Alpha', 'Beta','Gamma','Delta']
, columns=['A','B','C']) printすると以下の様になります。
, index=['Alpha', 'Beta','Gamma','Delta']
, columns=['A','B','C']) printすると以下の様になります。
| A | B | C | |
| Alpha | 1 | 2 | 3 |
| Beta | 10 | 20 | 30 |
| Gamma | 100 | 200 | 300 |
| Delta | 1000 | 2000 | 3000 |
● A列を抽出する
print(df['A']) ※または print(df.A) とも書けます。
Alpha 1
Beta 10
Gamma 100
Delta 1000
Name: A, dtype: int64
Beta 10
Gamma 100
Delta 1000
Name: A, dtype: int64
● 0行目から2行目までを取得
print(df[0:2]) ※または print(df[:2]) とも書けます。
| A | B | C | |
| Alpha | 1 | 2 | 3 |
| Beta | 10 | 20 | 30 |
● 行名を指定して取得
print(df['Alpha':'Gamma'])
| A | B | C | |
| Alpha | 1 | 2 | 3 |
| Beta | 10 | 20 | 30 |
| Gamma | 100 | 200 | 300 |
● loc属性を使って特定の行・列を取得
○ 特定の行を抽出
print(df.loc['Beta']) ※行列が反転します
A 10
B 20
C 30
Name: Beta, dtype: int64
A 10
B 20
C 30
Name: Beta, dtype: int64
○ AとB列をすべて抽出
print(df.loc[:,['A','B']])
| A | B | |
| Alpha | 1 | 2 |
| Beta | 10 | 20 |
| Gamma | 100 | 200 |
| Delta | 1000 | 2000 |
○ AlphaからGammaのA, B列を取得
print(df.loc['Alpha':'Gamma',['A','B']])
| A | B | |
| Alpha | 1 | 2 |
| Beta | 10 | 20 |
| Gamma | 100 | 200 |
● iloc属性を使って特定の行・列を取得
○ 0行を抽出 ※行列が反転します
print(df.iloc[0])
A 1
B 2
C 3
Name: Alpha, dtype: int64
A 1
B 2
C 3
Name: Alpha, dtype: int64
○ 1行目の1列目
print(df.iloc[1][1])
20
20
○ 1, 2行目の0, 1列を取得
print(df.iloc[[1,2],[0,1]])
| A | B | |
| Beta | 10 | 20 |
| Gamma | 100 | 200 |
○ 1~2行目のすべての列を取得
print(df.iloc[1:2, :])
| A | B | C | |
| Beta | 10 | 20 | 30 |
○ すべての行の0~1列
print(df.iloc[:, 0:1])
| A | |
| Alpha | 1 |
| Beta | 10 |
| Gamma | 100 |
| Delta | 1000 |
● at属性を使って特定の行・列を取得
print(df.at['Alpha', 'B'])
2
2
● iat属性を使って特定の行・列を取得
at属性の形で行と列を数値指定したものがiat属性になります。
print(df.iat[1, 2])
30
print(df.iat[1, 2])
30
● isin属性を使って条件を指定して行・列を取得
○ Aの値が5より大きいすべての行
print(df[df.A > 5])
| A | B | C | |
| Beta | 10 | 20 | 30 |
| Gamma | 100 | 200 | 300 |
| Delta | 1000 | 2000 | 3000 |
○ 5より大きいすべての要素、他はNaN
print(df[df > 5])
| A | B | C | |
| Alpha | NaN | NaN | NaN |
| Beta | 10.0 | 20.0 | 30.0 |
| Gamma | 100.0 | 200.0 | 300.0 |
| Delta | 1000.0 | 2000.0 | 3000.0 |
○ A列に 1 または 1000 を値に持つ行を抽出
print(df[df['A'].isin([1, 1000])])
| A | B | C | |
| Alpha | 1 | 2 | 3 |
| Delta | 1000 | 2000 | 3000 |
早見表
| df['A”] | A列をSeriesとして取り出す |
| df.A | A列をSeriesとして取り出す |
| df[0:2] | 0~2行目 |
| df[:3] | 0~3行目 |
| df['Alpha”:”Beta”] | Alpha~Betaの行を取り出す |
| df.loc['Beta”] | Betaの行を取り出す |
| df.loc[:, ['A”, 'B”]] | AとBの列を取り出す |
| df.loc['Alpha”:”Beta”,['A”, 'B”]] | Alpha~Betaの行のAとB |
| df.iloc[0] | 0行目 |
| df.iloc[1][1] | 1行目の1列目 |
| df.iloc[[1, 2],[0, 1]] | 1, 2行目の0, 1列 |
| df.iloc[1:2, :] | 1~2行目のすべての列 |
| df.iloc[:, 0:1] | すべての行の0~1列 |
| df.at['Alpha”, 'B”] | Alphaの行のB |
| df.iat[1, 2] | 1行目の2列目 |
| df[df.A > 5] | Aの値が5より大きいすべての行 |
| df.[df > 5] | 5より大きいすべての要素、他はNaN |
| df[df['A”].isin([1, 1000])] | A列に 1 または 1000 の値を持つ行。※isinの引数はリスト型 |




