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で開いてみてください。