pandasメモ
ドキュメントが充実しているのでそこを読めばよいのだが、Rで今まで行っていた作業を置き換えていく意味でメモ。
http://pandas.pydata.org/pandas-docs/stable/
適宜、追記・修正する。
import pandas as pd import matplotlib.pyplot as plt from pandas import DataFrame import xlrd # xlsを読み込む際に必要 import numpy as np import sqlite3 # データフレームを作る smp = {'state' : ['Ohio', 'Ohio', 'Ohio', 'Nebada', 'Nebada'], 'year' : [2000, 2001, 2002, 2001, 2002], 'pop' : [1.5, 1.6, 1.7, 3.5, 4.3]} frame = DataFrame(smp) # データフレームの要素へのアクセス frame.year # frame$year frame['year'] # frame$year frame.head() # head frame.tail() # tail frame2 = DataFrame(smp, index = ['one', 'two', 'three', 'four', 'five']) # インデックスを追加 frame2.ix['one'] frame2.describe() # summary # データを読み込む data = pd.read_csv('diamonds.csv') # ggplot2のdiamondsデータをcsv出力したもの xlsx_file = pd.ExcelFile('diamonds.xlsx') # openpyxlのインストールが必要, xlsも可 xlsx_file.sheet_names # シート名を確認 data = xlsx_file.parse('diamonds') # シート名を指定してパース # web上のデータを読み込む→http://docs.scipy.org/doc/numpy/reference/generated/numpy.DataSource.html ds = np.DataSource(None) f = ds.open('https://dl.dropbox.com/u/956851/game_modified.csv') d_web = pd.read_csv(f) f.close() # ピボットテーブル data2 = DataFrame(data[:100], columns = ['cut', 'clarity', 'price', 'color']) pd.pivot_table(data2, values = 'price', rows = ['clarity', 'cut'], cols = ['color'], aggfunc = 'sum') # マージ data.l = DataFrame(data[:6], columns = ['carat', 'clarity', 'price', 'depth']) data.r = DataFrame(data[-6:], columns = ['carat', 'clarity', 'price', 'depth']) pd.merge(data.l, data.r, on = 'clarity') pd.merge(data.l, data.r, on = 'clarity', how = 'outer') pd.merge(data.l, data.r, on = 'clarity', how = 'left') pd.merge(data.l, data.r, on = 'clarity', how = 'right') # 結合 pd.concat([data.l, data.r]) # rbind # ソート data3.sort_index(by = ['clarity', 'x']) data3.sort_index(by = ['clarity', 'x'], ascending = False) # groupby data4 = DataFrame(data[:100], columns = ['cut', 'color', 'clarity', 'carat', 'price']) data4.groupby('clarity').mean() # 数値のものだけ集計される data4.groupby(['cut', 'clarity']).mean() # 2水準以上の場合 data4.groupby(['cut', 'clarity']).mean()['price'] # 結果に対してのアクセス # apply data5 = DataFrame(data[:6], columns = ['carat', 'price', 'depth']) f = lambda x: x.max() - x.min() data5.apply(f) data5.apply(f, axis = 1) # 行方向(デフォルトは列方向) f2 = lambda x: '%.2f' % x # 数値の書式を下2桁表示に変更 data5.applymap(f2) # データフレームの各要素に適用 # vlookup clarity_to_class = {'SI1' : 'A', 'SI2' : 'B', 'VS1' : 'C', 'VS2' : 'D', 'VVS2' : 'E'} data3['class'] = data3['clarity'].map(clarity_to_class) # DB:SELECT文 import pandas.io.sql as sql con = sqlite3.connect(':memory:') sql.read_frame('select * from test', con) # データを書き出す-csv data2.to_csv('output.csv') # データを書き出す-エクセル writer = pd.ExcelWriter(’output.xlsx’) data2.to_excel(writer, sheet_name=’sample’) writer.save() # matplotlibによる描画 data.carat.plot() plt.show()