Pandas
データフレームは行列のようなものと言えるが、行名と列名でデータにアクセスできる点が配列との違い。
カレントディレクトリに以下のsample1.csvファイルを作っておき、Pandasを使って読み込む。(カレントディレクトリは"%pwd"で分かる)
〈sample1.csv>
Team,Win,Draw,Lose
Japan,3,0,0
Iraq,2,0,1
Jordan,1,0,2
Palestine,0,0,3
------------------------------------------------
In [53]: import pandas
In [55]: df=pandas.read_csv('sample1.csv',index_col='Team')
(Pandasのread_csv()関数を利用してcsvファイルのデータを読み込む。第一引数に読み込むファイルパスを指定。index_colには行名として採用する列を指定)
In [56]: df (読み込んだデータを表示)
Out[56]:
Win Draw Lose
Team
Japan 3 0 0
Iraq 2 0 1
Jordan 1 0 2
Palestine 0 0 3
In [57]: df['Win'] (列名を指定したデータ表示)
Out[57]:
Team
Japan 3
Iraq 2
Jordan 1
Palestine 0
Name: Win, dtype: int64
In [60]: df[['Win','Lose']] (複数の列名を指定したデータ表示)
Out[60]:
Win Lose
Team
Japan 3 0
Iraq 2 1
Jordan 1 2
Palestine 0 3
In [61]: df[df.Win >=2] (指定列の値によるデータの絞り込み)
Out[61]:
Win Draw Lose
Team
Japan 3 0 0
Iraq 2 0 1
In [62]: df.sum(numeric_only=True) (データの合計)
Out[62]:
Win 6
Draw 0
Lose 6
dtype: int64
In [63]: df.to_json('sample.json',orient='index') (JSON形式でのファイル出力)
-----------------------------------------------------------
クロス集計
以下のsample2.csvを読み込む
date,item,price
2016-09-01,apple,300
2016-09-01,apple,300
2016-09-01,orange,250
2016-09-02,orange,240
2016-09-02,orange,240
2016-09-02,banana,260
In [64]: df2=pandas.read_csv('sample2.csv')
(アイテム、日付ごとに価格を合計)
In [73]: df2.pivot_table(index=['date'],columns='item',aggfunc=[sum])
Out[73]:
sum
price
item apple banana orange
date
2016-09-01 600.0 NaN 250.0
2016-09-02 NaN 260.0 480.0
(レコード数を合計)
In [74]: df2.pivot_table(index=['date'],columns='item',aggfunc=[len])
Out[74]:
len
price
item apple banana orange
date
2016-09-01 2.0 NaN 1.0
2016-09-02 NaN 1.0 2.0
0 件のコメント:
コメントを投稿