概要
- pandasというのをよく目にする.Rっぽくデータ処理するためのライブラリみたいだ.
- DataFrameに2次元配列を渡してデータを生成する.タプルの配列や,ハッシュ配列でも行ける.
- 行はindex, 列はcolumnsで名前を付ければ,名前でアクセス可能.行は意味が無いなら名前つけない.その方がスライシングが分かりやすい.
- ix[row, col]でアクセスするのが一番汎用性が高い.
- 連結はjoinするような場合以外はconcatが柔軟で良い.
- CSVは特に悩むところはないのでWeb参考にする.
import pandas as pd
df = pd.DataFrame( [[0,1,2], [3,4,5], [6,7,8], [9,10,11]] )
df.columns = ['c0', 'c1', 'c2']
df.index = ['r0', 'r1','r2','r3']
df.shape
df1 = pd.DataFrame( [{'c0':1, 'c1':2}, {'c1':1, 'c2':2}, {'c0':1, 'c2':2}] )
df[1:3]
df['c0']
df[['c0', 'c1']]
df.ix[:,:]
df['c0'] > 0
df[df['c0'] > 0]
df['c3'] = [6,6,6,6]
print df.drop('c3', axis=1)
df1.fillna(0)
df1.interpolate()
df1.dropna(axis=0)
print df1
データフレームの生成
- 配列の配列として渡すと,行と列が逆になってしまう,などがあって,そのたびに調べてしまう。個人的に一番覚えやすいのは,下記の例のように辞書として渡す方法。これだと,列がキーになって明確。下の例はキーが'x', 'y'の列が出来る。
x = [1, 2, 3]
y = ['a', 'b', 'c']
df = pd.DataFrame({'x': x, 'y': y})
多重のソート
- あるキーでソートして,その結果の中で別のあるキーでソートする,と言う場合。ソートしたいキーをリストで渡すだけ。便利だ。
import pandas as pd
x = [1, 3, 1, 2, 2]
y = [5, 1, 2, 4, 3]
names = list('abced')
df = pd.DataFrame({'x':x, 'y':y, 'name':names})
df.sort_values(['x'])
df.sort_values(['x', 'y'])
よくハマること
文字列の数値への変換
- apply(pd.to_numeric, args=('coerce',))だと変換できなかったセルにはNaNが入る.で.それに気付かずにdropnaすると行全体がドロップしてしまう.
- convert_objects(convert_numeric=True)だとそれはないんだけど,古いAPIだぞ,ってワーニングが出る.
dropnaに関して
- dropnaするとインデックスが歯抜けになる.それを忘れて,乱数でアクセス行を作ってサンプリングしちゃうとNaNな行にアクセスしてしまう.
コピーに関して
- データフレームの代入は浅いコピーがされる.つまりdf=df_orgとかして,dfをいじるとdf_orgも弄られてしまうので注意.