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()に置き換えれば問題ありません。

シェア

関連カテゴリー

本・書籍 Python pandas NumPy Matplotlib

『Python Data Science Handbook』(英語の無料オンライン版あり) 『Pythonデータサイエンスハンドブック』は良書(NumPy, pandasほか) pandas参考書『Python for Data Analysis, 2nd Edition』 Pythonのリストと配列とnumpy.ndarrayの違いと使い分け Pythonでメソッドチェーンを改行して書く pandasからNumPyの関数などを使う方法(pd.np) Python, pandas, seabornでペアプロット図(散布図行列)を作成 pandas.DataFrame, SeriesとNumPy配列ndarrayを相互に変換 pandas, Matplotlib(mpl_finance)でローソク足チャートを作成 Pythonで正規化・標準化(リスト、NumPy配列、pandas.DataFrame) Python, pandas, seabornでヒートマップを作成 pandasのplotメソッドでグラフを作成しデータを可視化 pandasでExcelファイル(xlsx, xls)の読み込み(read_excel) pandas.DataFrame, Seriesの重複した行を抽出・削除 pandasで時系列データのOHLC(四本値)を算出・ダウンサンプリング

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