NoteRun

AttributeError: 'DataFrame' object has no attribute 'ix'

Pythonのエラー · pandas 1.0以降

このノートブックは古いpandas向けに書かれています。.ixはpandas 1.0(2020年1月)で削除されたため、使っている行はすべてこのエラーで止まります。Seriesでも同じエラー('Series' object has no attribute 'ix')が出ます。

原因

.ixは2つの選び方を混ぜていました。ラベルによる選択と、インデックスが整数でない場合の位置による選択です。pandasはこれを.loc(ラベル)と.iloc(位置)に分け、0.20で.ixを非推奨にし、1.0で削除しました。2020年より前に書かれた講座やチュートリアルのノートブックでは今も使われています。

直し方

ほとんどの.ixは行と列のラベルで選んでいます。その場合は.locと書きます。

修正前

df = pd.read_csv("sales.csv")
city = df.ix[0, "city"]

修正後

df = pd.read_csv("sales.csv")
city = df.loc[0, "city"]

インデックスが整数でなく、位置で選んでいる行(たとえば日付をインデックスにした表でのdf.ix[:5])は、.ilocと書きます(df.iloc[:5])。

NoteRunでは

NoteRunは、実行する前にノートブックをチェックします。.ixを含むセルには「このセルは実行できない可能性があります」と表示され、その場で修正できます。「修正」、またはノートブック全体なら「すべて修正」をタップします。タップするまで何も変わらず、変更はすべて事前に確認でき、「取り消す」で元に戻せます。位置で選んでいる可能性がある行は、確認するよう知らせます。

iPhoneまたはiPadで、このエラーを含むサンプルノートブックをダウンロードし、NoteRunで開いてみてください。

App Storeからダウンロード

ほかのエラー