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

pandasの開発者Wes Mckinney氏による『Python for Data Analysis』の訳書、『Pythonによるデータ分析入門 ――NumPy、pandasを使ったデータ処理』。 サブタイトルの通り、NumPy, pandasについてデータ操作などの基礎的な部分が網羅されています。 GitHubでJupyter Notebook(.ipynb)形式のサンプルコードで公開されています。以下のリンクから。

wesm/pydata-book at 1st-edition

原著第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によるデータ分析入門 第2版 ―NumPy、pandasを使ったデータ処理Wes McKinney オライリージャパン 売り上げランキング: 2,909Amazon.co.jpで詳細を見る また、『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(非推奨)となっています。

Indexing and Selecting Data — pandas 0.22.0 documentation

警告文の通り、ラベル(列名・行名)で指定する場合は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()を使います。

pandas.Series.order — pandas 0.18.1 documentation

列を指定してソートする場合、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でインポート

する必要があります。 pandas-datareaderを使った例としては

xrangeではなくrangeを使う

これはpandasではなくPython2からPython3での変更。 サンプルコード中でxrange()を使っている箇所がいくつかあるが、Python3でそのまま実行するとエラーとなります。 NameError: name 'xrange' is not defined

Python2ではリストを返すrange()とイテレータを返すxrange()があったが、Python3ではrange()がイテレータを返すようになり、xrange()は廃止されました。 Python3で実行する場合はxrange()をrange()に置き換えれば問題ありません。

Last Updated: 6/26/2019, 10:34:03 PM