pandas参考書『Pythonによるデータ分析入門』の注意点

Modified: | Tags: 本・書籍, Python, pandas, NumPy, Matplotlib

pandasの開発者Wes Mckinney氏による『Python for Data Analysis』の訳書、『Pythonによるデータ分析入門 ――NumPy、pandasを使ったデータ処理』。

サブタイトルの通り、NumPy, pandasについてデータ操作などの基礎的な部分が網羅されている。

GitHubでJupyter Notebook(.ipynb)形式のサンプルコードで公開されている。以下のリンクから。

原著第1版は2012年10月発売。かなり前。

特にpandasは更新が活発なので、現在ではdeprecated(非推奨)となっているメソッドが使われていたりして、第1版のサンプルコードをそのまま実行すると警告やエラーが発生してしまう。

以下、すべてではないが主にpandasで大きく変わった部分について簡単に説明する。

  • ixではなくloc, iloc
  • Seriesの要素でソートする場合、order()ではなくsort_values()
  • 列を指定してソートする場合、sort_index()ではなくsort_values()
  • pandas.io.dataではなくpandas-datareader
  • xrange()ではなくrange()

なお、原著は第2版(2nd Edition)が2017年10月に発売されていて、サンプルコードも新しいバージョンに対応している。第1版からの変更点などについては以下の記事を参照。

2018年7月26日に日本語版の第2版も発売された。これから買うなら絶対に第2版を買うべき。

また、『Python Data Science Handbook』の日本語版『Pythonデータサイエンスハンドブック』が2018年5月26日に発売された。

pandasについては『Pythonによるデータ分析入門』のほうが詳しいが、Matplotlibについては『Pythonデータサイエンスハンドブック』のほうが詳しい。『Pythonデータサイエンスハンドブック』では機械学習のライブラリscikit-learnも扱っている。

ixではなくloc, iloc

pandas.DataFrameのデータ選択のための方法としてixフィールドが紹介されている(P146ほか)。

これをver0.22.0で実行すると警告が出る。

DeprecationWarning:
.ix is deprecated. Please use
.loc for label based indexing or
.iloc for positional indexing

ver0.20.0からixはdeprecated(非推奨)となっている。

警告文の通り、ラベル(列名・行名)で指定する場合はloc、列番号・行番号で指定する場合はilocを使う。

loc, ilocなどの詳細は以下の記事を参照。

Seriesの要素でソートする場合、orderではなくsort_values

pandas.Seriesをラベルではなくデータ(要素)でソートする方法としてorder()が紹介されている(P154)。

これをver0.22.0で実行するとエラーになる。

AttributeError: 'Series' object has no attribute 'order'

order()は廃止されているので、ver0.17.0から追加されたsort_values()を使う。

列を指定してソートする場合、sort_indexではなくsort_values

pandas.DataFrameの列を指定してソートする方法としてsort_index(by=...)が紹介されている(P155)。

これをver0.22.0で実行すると警告が出る。

FutureWarning: by argument to sort_index is deprecated, please use .sort_values(by=...)

列のデータ(要素)でソートする場合はver0.17.0から追加されたsort_values(by=...)を使う。

sort_index()は廃止されたわけではなく、インデックス(行名・列名)でソートする場合に用途が限定された。

sort_values(), sort_index()についての詳細は以下の記事を参照。

pandas.io.dataではなくpandas-datareader

株価のデータを取得するためにpandas.io.dataをインポートして使っている(P160など)。

これをver0.22.0で実行するとエラーとなる。

ImportError: The pandas.io.data module is moved to a separate package (pandas-datareader).
After installing the pandas-datareader package ([https://github.com/pydata/pandas-datareader),]
(https://github.com/pydata/pandas-datareader),) you can change the import
`from pandas.io import data, wb` to `from pandas_datareader import data, wb`.

pandas.io.dataモジュールはpandasのパッケージから分離されたので、

  • pandas-datareaderpipで別途インストール
  • import pandas_datareader.data as webでインポート

する必要がある。

また、P160ではYahoo!ファイナンスからデータを取得しているが、バージョン0.6.0(2018年1月24日リリース)以降のpandas-datareaderはYahoo!ファイナンスに対応していない。

pandas-datareaderについては以下の記事を参照。

xrangeではなくrangeを使う

これはpandasではなくPython2からPython3での変更。

サンプルコード中でxrange()を使っている箇所がいくつかあるが、Python3でそのまま実行するとエラーとなる。

NameError: name 'xrange' is not defined

Python2ではリストを返すrange()とイテラブルオブジェクトを返すxrange()があったが、Python3ではrange()がイテラブルオブジェクトを返すようになり、xrange()は廃止された。

Python3で実行する場合はxrange()range()に置き換えればOK。

関連カテゴリー

関連記事