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次元配列にする |
通常の配列を 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()