python3.doc_35
R e i - D r e a m
for Laravel
TOP > Python3 > ライブラリ(Pandas)
Guest
login

最終投稿日: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 との違いは、カンマ区切りかタブ区切りかです
○ 引数
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()
● ループ処理
CSVサンプル)
    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 と順に取得できる
○ 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,あ と順に取得できる
【メモ】
値を参照する際に上記2つの例では、item[0] row[0] と参照していたが、
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)
【メモ】
1行か1列で取り出したデータをループ処理する
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すると以下の様になります。
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
● 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と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
○ 1行目の1列目
print(df.iloc[1][1])
    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
● iat属性を使って特定の行・列を取得
at属性の形で行と列を数値指定したものがiat属性になります。
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の引数はリスト型
ログインしてコメントを残そう!!


きっぷる