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

概要

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

メソッド一覧

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

CategoricalCategoricalIndexDataFrame
DateOffsetDatetimeIndexExcelFile
ExcelWriterExprFloat64Index
GrouperHDFStoreIndex
IndexSliceInt64IndexMultiIndex
NaTPanelPanel4D
PeriodPeriodIndexRangeIndex
SeriesSparseArraySparseDataFrame
SparseListSparseSeriesSparseTimeSeries
TermTimeGrouperTimeSeries
TimedeltaTimedeltaIndexTimestamp
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_windowalgos
apibdate_rangecompat
computationconcatcore
crosstabcutdate_range
datetimedatetoolsdescribe_option
evalewmaewmcorr
ewmcovewmstdewmvar
ewmvolexpanding_applyexpanding_corr
expanding_countexpanding_covexpanding_kurt
expanding_maxexpanding_meanexpanding_median
expanding_minexpanding_quantileexpanding_skew
expanding_stdexpanding_sumexpanding_var
factorizefama_macbethformats
get_dummiesget_optionget_store
groupbyhashtableindex
indexesinfer_freqinfo
ioisnulljson
liblreshapematch
meltmergemerge_asof
merge_orderedmsgpacknotnull
npoffsetsols
option_contextoptionsordered_merge
pandasparserperiod_range
pivotpivot_tableplot_params
pnowqcutread_clipboard
read_csvread_excelread_fwf
read_gbqread_hdfread_html
read_jsonread_msgpackread_pickle
read_sasread_sqlread_sql_query
read_sql_tableread_stataread_table
reset_optionrolling_applyrolling_corr
rolling_countrolling_covrolling_kurt
rolling_maxrolling_meanrolling_median
rolling_minrolling_quantilerolling_skew
rolling_stdrolling_sumrolling_var
rolling_windowscatter_matrixset_eng_float_format
set_optionshow_versionssparse
statstesttimedelta_range
to_datetimeto_msgpackto_numeric
to_pickleto_timedeltatools
tseriestslibtypes
uniqueutilvalue_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