DataFrameのカラムを削除する際には、以下のようにしています。
del df['column_name']
とすると、うまくいきます。なぜ次のようにできないのでしょうか?
del df.column_name
*列/Seriesにはdf.column_name
でアクセスできるので、これで動作すると思われます。
pandasでこれを行うには、drop
を使うのが一番です。
df = df.drop('column_name', 1)
ここで、1
は 軸 の番号です (行は 0
、列は 1
です)。
df`を再割り当てすることなく、列を削除するには次のようにします。
df.drop('column_name', axis=1, inplace=True)
最後に、列ラベルではなく、列番号でドロップするには、次のようにして、例えば、1、2、4列目を削除します。
df = df.drop(df.columns[[0, 1, 3]], axis=1) # df.columns is zero-based pd.Index
お察しの通り、正しい構文は
del df['column_name']
デル df.column_nameを単純に動作させるのは難しいですが、これは Python の構文上の制限の結果です。del df[name]
はPythonでは隠れてdf.__delitem__(name)
と翻訳されてしまいます。
常に[]
の表記を使用するのが良い方法です。その理由の一つは、属性表記(df.column_name
)が番号付きインデックスには使えないからです。
In [1]: df = DataFrame([[1, 2, 3], [4, 5, 6]])
In [2]: df[1]
Out[2]:
0 2
1 5
Name: 1
In [3]: df.1
File "<ipython-input-3-e4803c0d1066>", line 1
df.1
^
SyntaxError: invalid syntax