Bir sütunu bırakmak için df.drop ('sütun adı', eksen = 1) kullandığınızı anlıyorum. Sütun adı yerine sayısal bir dizin kullanarak sütun bırakmanın bir yolu var mı?
Bir sütunu bırakmak için df.drop ('sütun adı', eksen = 1) kullandığınızı anlıyorum. Sütun adı yerine sayısal bir dizin kullanarak sütun bırakmanın bir yolu var mı?
Yanıtlar:
Dizindeki sütunu şu şekilde silebilirsiniz i
:
df.drop(df.columns[i], axis=1)
Bu, garip çalışabilir, sütunlarda yinelenen adlarınız varsa, bunu yapmak için sütunu yeni adla silmek istediğiniz sütunu yeniden adlandırabilirsiniz. Veya DataFrame'i şu şekilde yeniden atayabilirsiniz:
df = df.iloc[:, [j for j, c in enumerate(df.columns) if j != i]]
Bunun gibi birden çok sütun bırakın:
cols = [1,2,4,5,12]
df.drop(df.columns[cols],axis=1,inplace=True)
inplace=True
veri çerçevesinin bir kopyasını bırakarak sütun yapmadan veri çerçevesindeki değişiklikleri yapmak için kullanılır. Orijinal belgenizi sağlam tutmanız gerekiyorsa, şunu kullanın:
df_after_dropping = df.drop(df.columns[cols],axis=1)
inplace=True
o zaman yapmanız gerekecektir df = df.drop()
Eğer değişim görmek istiyorsanız df
kendisi.
Aynı adlara sahip birden çok sütun varsa, şimdiye kadar burada verilen çözümler, tüm sütunları kaldıracaktır, bu aradığınız şey olmayabilir. Biri dışında bir örnek yinelenen sütunları kaldırmaya çalışıyorsa durum böyle olabilir. Aşağıdaki örnek bu durumu açıklığa kavuşturmaktadır:
# 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
Gördüğünüz gibi, her iki Xs sütunu da bırakıldı. Alternatif çözüm:
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
Gördüğünüz gibi, bu gerçekten yalnızca 0. sütunu (ilk 'x') kaldırdı.
Sütunları, veri çerçevesindeki konumlarına göre tanımlamanız gerekir. Örneğin, 2,3 ve 5 numaralı sütunları (del) bırakmak istiyorsanız,
df.drop(df.columns[[2,3,5]], axis = 1)
Aynı ada sahip iki sütununuz varsa. Bunun basit bir yolu, sütunları manuel olarak şu şekilde yeniden adlandırmaktır:
df.columns = ['column1', 'column2', 'column3']
Daha sonra, istediğiniz gibi sütun dizini yoluyla bırakabilirsiniz:
df.drop(df.columns[1], axis=1, inplace=True)
df.column[1]
indeks 1 düşecektir.
Eksen 1 = sütunlar ve eksen 0 = satırları hatırlayın.
gerçekten tamsayılarla yapmak istiyorsanız (ama neden?), o zaman bir sözlük oluşturabilirsiniz.
col_dict = {x: col for x, col in enumerate(df.columns)}
sonra df = df.drop(col_dict[0], 1)
istendiği gibi çalışacaktır
edit: bunu sizin için yapan bir işleve koyabilirsiniz, ancak bu şekilde her aradığınızda sözlüğü oluşturur
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)
İlk iki sütunu (veya ihtiyacınız olmayan herhangi bir sütunu) bırakmak için aşağıdaki satırı kullanabilirsiniz:
df.drop([df.columns[0], df.columns[1]], axis=1)
Aynı ada sahip birden çok sütun olabileceğinden, önce sütunları yeniden adlandırmalıyız. İşte çözüm için kod.
df.columns=list(range(0,len(df.columns)))
df.drop(columns=[1,2])#drop second and third columns