Pandasの全メソッドを解説(その1)

概要

Pythonモジュールのpandasには、その直下に181個という大量のメソッドがあります。さらにそれぞれのメソッドの下や、DataFrameオブジェクトもメソッドを持っており総数は非常に膨大なため、せっかくの便利機能に気付いていない、というケースが多いのではないでしょうか。ということで、まずはpandas(pd)直下の181個のメソッドについて調べてみました。なお、Pandasのバージョンは0.19.2です。

メソッド一覧

ものすごい量です。その1ではCategorical~WidePanelまで(33個)を対象にしました。

Categorical CategoricalIndex DataFrame
DateOffset DatetimeIndex ExcelFile
ExcelWriter Expr Float64Index
Grouper HDFStore Index
IndexSlice Int64Index MultiIndex
NaT Panel Panel4D
Period PeriodIndex RangeIndex
Series SparseArray SparseDataFrame
SparseList SparseSeries SparseTimeSeries
Term TimeGrouper TimeSeries
Timedelta TimedeltaIndex Timestamp
WidePanel __builtins__ __cached__
__doc__ __docformat__ __file__
__loader__ __name__ __package__
__path__ __spec__ __version__
_join _np_version_under1p10 _np_version_under1p11
_np_version_under1p12 _np_version_under1p8 _np_version_under1p9
_period _sparse _testing
_version _window algos
api bdate_range compat
computation concat core
crosstab cut date_range
datetime datetools describe_option
eval ewma ewmcorr
ewmcov ewmstd ewmvar
ewmvol expanding_apply expanding_corr
expanding_count expanding_cov expanding_kurt
expanding_max expanding_mean expanding_median
expanding_min expanding_quantile expanding_skew
expanding_std expanding_sum expanding_var
factorize fama_macbeth formats
get_dummies get_option get_store
groupby hashtable index
indexes infer_freq info
io isnull json
lib lreshape match
melt merge merge_asof
merge_ordered msgpack notnull
np offsets ols
option_context options ordered_merge
pandas parser period_range
pivot pivot_table plot_params
pnow qcut read_clipboard
read_csv read_excel read_fwf
read_gbq read_hdf read_html
read_json read_msgpack read_pickle
read_sas read_sql read_sql_query
read_sql_table read_stata read_table
reset_option rolling_apply rolling_corr
rolling_count rolling_cov rolling_kurt
rolling_max rolling_mean rolling_median
rolling_min rolling_quantile rolling_skew
rolling_std rolling_sum rolling_var
rolling_window scatter_matrix set_eng_float_format
set_option show_versions sparse
stats test timedelta_range
to_datetime to_msgpack to_numeric
to_pickle to_timedelta tools
tseries tslib types
unique util value_counts
wide_to_long

Categorical

カテゴリ変数を定義するときに使うメソッド。カテゴリ変数は文字列型とは異なり、bad < normal < good等の順序の概念を持たせることが可能です。

#c<a<bの順に定義
df = pd.Categorical(['a','b','c','a','b','c'], 
           ['c', 'a', 'b'], ordered=True)

ソートしてみる。

df.sort()

結果

[ c, c, a, a, b, b ]
Categories (3, object): 

c < a < bの順になっていますね。順序が定義されているのでmaxやminも使えます。

CategoricalIndex

カテゴリ変数をインデックスとして定義するときに使うメソッド。使い方はCategoricalと同様で以下のように宣言。

pd.CategoricalIndex(['a','b','c','a','b','c'], 
           ['c', 'a', 'b'], ordered=True)

以下のようなカテゴリ型インデックスが返されます。

CategoricalIndex(['a', 'b', 'c', 'a', 'b', 'c'], 
          categories=['c', 'a', 'b'], 
          ordered=True, dtype='category')

DataFrame

DataFrameを作成するときに使うメソッド。説明不要ですね。

#dataやindex, columns等を指定(又は省略して使う)
pd.DataFrame(data=[list(range(3)), list(range(1, 4)), list(range(2, 5))], 
       index=['a', 'b', 'c'], columns=['A', 'B', 'C'])

以下のようなデータフレームが作成されます。

   A  B  C
a  0  1  2
b  1  2  3
c  2  3  4

DateOffset

日付の足し引きをしたいときに使うメソッド。

#20日だけオフセット
datetime.date(2017, 1, 1) + pd.DateOffset(20)

以下のようにオフセットされた結果が得られます。

Timestamp('2017-01-21 00:00:00')

DatetimeIndex

指定した条件で日付型のインデックスを作るメソッド。

#1日間隔で、2017年1月1日~2018年1月1日のインデックスを作る。
pd.DatetimeIndex(start=datetime.date(2017, 1, 1), 
          freq='1D', end=datetime.date(2018,1,1))

以下のような結果が得られます。

DatetimeIndex(['2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04',
               '2017-01-05', '2017-01-06', '2017-01-07', '2017-01-08',
               '2017-01-09', '2017-01-10',
               ...
               '2017-12-23', '2017-12-24', '2017-12-25', '2017-12-26',
               '2017-12-27', '2017-12-28', '2017-12-29', '2017-12-30',
               '2017-12-31', '2018-01-01'],
              dtype='datetime64[ns]', length=366, freq='D')

ExcelFile

エクセルファイルを(データフレームとしてではなく)メモリに読み込みたいときに使うメソッド。

#適当なExcelファイルを読み込む。
test = pd.ExcelFile("test.xlsx")

シート名の一覧を取得したりできる。

test.sheet_names

ExcelWriter

エクセルファイルを作成したいときに使うメソッド。

#保存したいファイルのwriterを作成
writer = pd.ExcelWriter('test.xlsx')
#デーフレームをwriterに書き込む
df.to_excel(writer)
#saveすると保存される。
writer.save()

Expr

式をカプセル化するオブジェクト(Object encapsulating an expression.)とのこと。これ単体での使い方は不明。

Float64Index

64bitのfloat型のインデックスを作りたいときに使うメソッド。

#Int型を渡す。
pd.Float64Index(range(3))

(当然)結果はFloat64で返される。

Float64Index([0.0, 1.0, 2.0], dtype='float64')

Grouper, TimeGrouper

groupbyの条件として与えるメソッド。

#適当なkey等を指定して使う。
df.groupby(pd.Grouper(key=0))
df.groupby(pd.TimeGrouper(freq='6M'))

HDFStore

hdf5形式のファイルを読み込むために使うメソッド。hdf5形式のファイル自体を使ったことがないので機能は未検証です。

store = pd.HDFStore('test.h5')

Index

リスト等をIndexに変換したいときに使うメソッド。

#list型を渡す。
pd.Index(list(range(10)))

Index型が返される。

Int64Index([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype='int64')

IndexSlice

MultiIndexのレベル2以上の要素でスライスをかけたいときに使うメソッド。地味に便利ですね。

#MultiIndexのDataFrameを作成。
midx = pd.MultiIndex.from_product([['A0','A1'], ['B0','B1','B2','B3']])
columns = ['foo', 'bar']
dfmi = pd.DataFrame(np.arange(16).reshape((len(midx), len(columns))),
                        index=midx, columns=columns)

こんなのが出来てます。

       foo  bar
A0 B0    0    1
   B1    2    3
   B2    4    5
   B3    6    7
A1 B0    8    9
   B1   10   11
   B2   12   13
   B3   14   15

ここでB0:B1でスライスしたいとする。

dfmi.loc[pd.IndexSlice[:, 'B0':'B1'], :]

以下のような結果が得られます。

       foo  bar
A0 B0    0    1
   B1    2    3
A1 B0    8    9
   B1   10   11

Int64Index

リスト等をInt64型のIndexに変換したいときに使うメソッド。

#list型を渡す。
pd.Int64Index(list(range(10)))

Int64型のIndex型が返される。

Int64Index([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype='int64')

MultiIndex

MultiIndexを定義したいときに使うメソッド。これよりも下位のメソッドであるMultiIndex.from_productやMultiIndex.from_arraysを使うことのが多いかもしれません。

#MultiIndexの要素[level], 割り振り[label]の順で指定。 
pd.MultiIndex([['A0', 'A1'], ['B0', 'B1', 'B2', 'B3']], 
        [[0, 0, 0, 0, 1, 1, 1, 1], [0, 1, 2, 3, 0, 1, 2, 3]])

MultiIndexが返される。

MultiIndex(levels=[['A0', 'A1'], ['B0', 'B1', 'B2', 'B3']],
           labels=[[0, 0, 0, 0, 1, 1, 1, 1], [0, 1, 2, 3, 0, 1, 2, 3]])

NaT

Not a Time を表す欠損値の表記。NaNは Not a Numberですね。np.pi等と同じく、それ自体がValueとなっています。

pd.NaT

NaTが返される。

NaT

Panel, WidePanel

3次元配列のデータフレームを宣言したいときに使うメソッド。3次元配列を渡すか、複数のデータフレームを辞書形式で渡すことで作成できる。WidePanelもPanelと同様に見えますが、ちょっと良く分かりません。

#3×3×3のDataFrame作成
pd.Panel(np.zeros([3, 3, 3]))
#以下でも同様
pd.Panel({0:np.zeros([3, 3]), 1:np.zeros([3,3]), 2:np.zeros([3,3])})

Panel(3次元のデータフレーム)が返される。

<class 'pandas.core.panel.Panel'>
Dimensions: 3 (items) x 3 (major_axis) x 3 (minor_axis)
Items axis: 0 to 2
Major_axis axis: 0 to 2
Minor_axis axis: 0 to 2

Panel4D

4次元配列のデータフレームを宣言したいときに使うメソッド。4次元配列を渡すか、複数のパネルを辞書形式で渡すことで作成できる。

#3×3×3×3のDataFrame作成
pd.Panel4D(np.zeros([3, 3, 3, 3]))

Panel4D(4次元のデータフレーム)が返される。

<class 'pandas.core.panelnd.Panel4D'>
Dimensions: 3 (labels) x 3 (items) x 3 (major_axis) x 3 (minor_axis)
Labels axis: 0 to 2
Items axis: 0 to 2
Major_axis axis: 0 to 2
Minor_axis axis: 0 to 2

Period

Period型の変数を単体で指定して使いたいときに使うメソッド。

#日時と頻度を指定する。
pd.Period(year=2017, freq='1H')

Period型のデータが返される。

Period('2017-01-01 00:00', 'H')

PeriodIndex

開始時間や期間を指定してPeriodIndexを作りたい時に使うメソッド。

#日時と頻度と期間を指定する。
pd.PeriodIndex(start=pd.Period(year=2017, freq='1D'), end=pd.Period(year=2018, freq='1D'))

PeriodIndex型のデータが返される。

PeriodIndex(['2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04',
             '2017-01-05', '2017-01-06', '2017-01-07', '2017-01-08',
             '2017-01-09', '2017-01-10',
             ...
             '2017-12-23', '2017-12-24', '2017-12-25', '2017-12-26',
             '2017-12-27', '2017-12-28', '2017-12-29', '2017-12-30',
             '2017-12-31', '2018-01-01'],
            dtype='period[D]', length=366, freq='D')

RangeIndex

RangeIndexを作りたい時に使うメソッド。イテレータのまま使いたいときなどに出番があるのでしょうか。

#Range関数と同じように使う
pd.RangeIndex(0, 10)

RangeIndex型のデータが返される。

RangeIndex(start=0, stop=10, step=1)

Series

1次元のDataFrameであるSeries型を使いたいときに使うメソッド。Series型にすることで、そこに格納されているデータ型ごとの便利メソッド(strやdt等)を使うことができる。

#使い方はDataFrameとほぼ同じ。
pd.Series(index=range(10), data=range(10, 20), name='test')

こんなSerise型を作ってみました。

0    10
1    11
2    12
3    13
4    14
5    15
6    16
7    17
8    18
9    19
Name: test, dtype: int32

SparseArray, SparseDataFrame, SparseList, SparseSeries, SparseTimeSeries

Series型やDataFrame型をSparseバージョンで使いたいときに使うメソッド。nanが混ざっていると、nanでないIndexだけを返してくれますが、使いどころが良く分かりません。

#nanを混ぜておく。
pd.SparseArray([0, np.nan, 1])

Indicesにnan以外のIndexが返されます。

[0.0, nan, 1.0]
Fill: nan
IntIndex
Indices: array([0, 2])

Term

特定の条件を文字列で与えるとExpr型で返してくれるメソッド。pytablesを使っている場合に役に立つそうです。

#文字列で条件を指定。
pd.Term('index>=date')

TimeSeries

TimeSeries型を宣言するメソッド。Seriesに統一されるようです。

#時間用のSeriesデータを宣言
pd.TimeSeries(pd.Period(year=2017, freq='1D'))

TimeSeries型が返される。

0   2017-01-01
dtype: object

Timedelta

時間の差分を示すTimedelta型を宣言するメソッド。

#1日の差分を定義
pd.Timedelta('1D')

Timedelta型が返される。

Timedelta('1 days 00:00:00')

Timedelta

時間の差分を示すTimedelta型をIndex型で宣言するメソッド。

#開始・終了・周期を指定。
pd.TimedeltaIndex(start='1D', end='2D', freq='1H')

指定した条件のTimedeltaIndex型が返される。

TimedeltaIndex(['1 days 00:00:00', '1 days 01:00:00', '1 days 02:00:00',
                '1 days 03:00:00', '1 days 04:00:00', '1 days 05:00:00',
                '1 days 06:00:00', '1 days 07:00:00', '1 days 08:00:00',
                '1 days 09:00:00', '1 days 10:00:00', '1 days 11:00:00',
                '1 days 12:00:00', '1 days 13:00:00', '1 days 14:00:00',
                '1 days 15:00:00', '1 days 16:00:00', '1 days 17:00:00',
                '1 days 18:00:00', '1 days 19:00:00', '1 days 20:00:00',
                '1 days 21:00:00', '1 days 22:00:00', '1 days 23:00:00',
                '2 days 00:00:00'],
               dtype='timedelta64[ns]', freq='H')

Timestamp

文字列をTimestamp型に変換するメソッド。

#文字列で指定。
pd.Timestamp('2015-1-1')

指定した条件のTimestamp型が返される。

Timestamp('2015-01-01 00:00:00')

文字列のフォーマットに関しては以下を参考にしてください。

Pandasで取り扱える日付データのフォーマット


まとめ

その1ではCategorical~WidePanelまで(33個)を対象にしました。先が遠くなりますが、その2以降も続けていきますのでよろしくお願いします。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA