概要
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')
文字列のフォーマットに関しては以下を参考にしてください。
まとめ
その1ではCategorical~WidePanelまで(33個)を対象にしました。先が遠くなりますが、その2以降も続けていきますのでよろしくお願いします。