列をドロップするには、df.drop( 'column name'、axis = 1)を使用することを理解しています。列名の代わりに数値インデックスを使用して列を削除する方法はありますか?
列をドロップするには、df.drop( 'column name'、axis = 1)を使用することを理解しています。列名の代わりに数値インデックスを使用して列を削除する方法はありますか?
回答:
次のi
ようにインデックスの列を削除できます:
df.drop(df.columns[i], axis=1)
列に重複した名前がある場合、奇妙に動作する可能性があるため、これを行うには、削除する列の名前を新しい名前で変更できます。または、次のようにDataFrameを再割り当てできます。
df = df.iloc[:, [j for j, c in enumerate(df.columns) if j != i]]
次のように複数の列をドロップします。
cols = [1,2,4,5,12]
df.drop(df.columns[cols],axis=1,inplace=True)
inplace=True
データフレームのコピーで列を削除せずに、データフレーム自体に変更を加えるために使用されます。オリジナルをそのまま維持する必要がある場合は、以下を使用します。
df_after_dropping = df.drop(df.columns[cols],axis=1)
inplace=True
しないdf = df.drop()
場合は、df
それ自体の変化を見たい場合に使用する必要があります。
同じ名前の列が複数ある場合、ここまでの解決策ではすべての列が削除されるため、目的の列ではない可能性があります。これは、1つのインスタンスを除いて重複する列を削除しようとしている場合に発生することがあります。次の例は、この状況を明確にしています。
# make a df with duplicate columns 'x'
df = pd.DataFrame({'x': range(5) , 'x':range(5), 'y':range(6, 11)}, columns = ['x', 'x', 'y'])
df
Out[495]:
x x y
0 0 0 6
1 1 1 7
2 2 2 8
3 3 3 9
4 4 4 10
# attempting to drop the first column according to the solution offered so far
df.drop(df.columns[0], axis = 1)
y
0 6
1 7
2 8
3 9
4 10
ご覧のとおり、両方のXs列が削除されています。代替ソリューション:
column_numbers = [x for x in range(df.shape[1])] # list of columns' integer indices
column_numbers .remove(0) #removing column integer index 0
df.iloc[:, column_numbers] #return all columns except the 0th column
x y
0 0 6
1 1 7
2 2 8
3 3 9
4 4 10
ご覧のとおり、これは本当に0番目の列(最初の「x」)のみを削除しました。
あなたが本当に整数でそれをしたいなら(しかしなぜですか?)、あなたは辞書を作ることができます。
col_dict = {x: col for x, col in enumerate(df.columns)}
その後df = df.drop(col_dict[0], 1)
、必要に応じて動作します
編集:あなたはそれをあなたのためにそれを行う関数に入れることができますが、このようにそれはあなたがそれを呼び出すたびに辞書を作成します
def drop_col_n(df, col_n_to_drop):
col_dict = {x: col for x, col in enumerate(df.columns)}
return df.drop(col_dict[col_n_to_drop], 1)
df = drop_col_n(df, 2)