pandas参考書『Pythonによるデータ分析入門』の注意点
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版を買うべき。
オライリージャパン
売り上げランキング: 2,909
また、『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-datareader
をpip
で別途インストール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。