pandasでよく使う文法まとめ

  • 299
    Like
  • 0
    Comment

Pythonのデータ分析用ライブラリ「pandas」でよく使う文法をまとめました.

  • Change log
2017-06-09 リンク切れ等の修正
2016-10-10 例の編集
2016-06-21 df.rolling, pd.date_range, pd.datetime, df.pivotの追加,その他の例の追加

CSVファイルの扱い

pd.read_csv(読み込み)

多くのオプションが用意されているので,csv以外でもなんでも読み込める.

import pandas as pd

df = pd.read_csv('some.csv')

例:複数column(datehour)をまとめて,datetime型のindex(date_hour)として読む場合

df = pd.read_csv('some.csv', parse_dates={'date_hour':['date', 'hour']}, index_col='date_hour')

例:日本語の入ったファイル,かつ--を欠損データ扱いにする場合

df = pd.read_csv('some.csv', encoding='Shift_JIS', na_values='--')
  • オプション一覧
option 意味
index_col indexとするcolumn名
parse_dates datetime型で読み込むcolumn名(リストや辞書)
date_parser parse_datesで指定したcolumnを読み込む自作関数
na_values 欠損値とする文字列(リスト)
encoding 'Shift_JIS'など
sep 区切り文字(' ':スペースの場合)

df.to_csv(書き込み)

恐ろしく簡単にcsvファイルに書き込める.オプションも豊富.

df.to_csv('some2.csv')

例:indexがいらない場合

df.to_csv('some2.csv', index=None)

例:indexに名前をつける場合

df.to_csv('some2.csv', index_label='date')

欠損値の扱い

df.dropna(削除)

欠損値(nan)のある行(index)を削除

df = df.dropna()

例:特定のcolumn(tempdepth)に欠損値がある場合,その行を削除する
tempdepth以外の欠損値は無視する)

df = df.dropna(subset=['temp','depth'])

df.fillna(穴埋め)

例:定数(0)で穴埋め

df = df.fillna(0)

例:前方穴埋め(後方穴埋め)

df = df.fillna(method='ffill')  # (直後の値で)前方穴埋め
df = df.fillna(method='bfill')  # (直前の値で)後方穴埋め

df.interpolate(補間)

多くの補間手法が用意されている.

df = df.interpolate(method='index')

df.resample(リサンプル)

時系列データの解像度(頻度)を変更する.
自分が使うときはデータ数を減らすことが多いので圧縮するための関数と認識.

例:1時間毎のデータを日平均に変換(欠損値は無視して平均される)

#daily = hourly.resample('D', how='mean') <- 古い書き方
daily = hourly.resample('D').mean()

例:上だと値が 00:00 に配置されるが,12:00 にしたい場合

daily = hourly.resample('D', loffset='12H').mean()

時間のフォーマット

Charactor 意味 備考
M 0.5M で半月とはならない
D 15D で手を打っている
H 時間 12H は12時間
T or min 30min で30分

df.rolling(移動平均)

n項移動平均や最大値などを取る

例:3項移動平均(center=Trueで中央(この場合第2項)に値を配置)

ma3 = hourly.rolling(3, center=True).mean()

時間の扱い

pd.date_range

連続したdatetime変数を簡単に作れる

date = pd.date_range('2012-1-1', '2012-1-2', freq='D')

例:上のままだとpandasのTimestampなので,pythonのdatetime変数に戻す場合

date = pd.date_range('2012-1-1', '2012-1-2', freq='D').to_pydatetime()

pd.datetime

import datetimeがいらない

date = pd.datetime(2012, 1, 1, 0, 0, 0)

その他よく使う関数

df.describe(要約統計量)

各columnのデータ数、平均、分散などの統計量をざっと見る.

print df.describe()

df.groupby(集約)

columnでグループ化(columnの値をindexとして扱えるように変換)することでデータを扱いやすくする.
stack, unstackよりも判りやすい.

例:複数column(typetime)でグループ化し、各グループの平均をとる.

grouped_mean = df.groupby(['type','time']).mean()

df.pivot(1D→2D)

1次元配列を2次元配列にするイメージ

temp2d = df.pivot(index='y', columns='x', values='temp')

その他のTips

DataFrameの作成(辞書型)

ファイル以外からDataFrameを作る場合には,辞書を作って読み込ませる.

data = {'a':[0, 1], 'b':[2, 3]}

df = pd.DataFrame(data)

例:上の例にindexをつける場合

date = pd.date_range('2012-1-1', '2012-1-2', freq='D')

df = pd.DataFrame(data, index=date)

print時の折り返し幅の拡張

カラム数の多いデータフレームのprint時に表示が折り返されてしまうのが嫌な場合、表示幅を変更できる.

pd.set_option('line_width', 100)

print df  # 100文字まで折り返されない

参考になるリンク