int kullanarak python dataframe pandalar açılan sütun


Yanıtlar:


167

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]]

4
Sanırım noktayı kaçırdınız - etikete göre değil, indekse bırakmak istiyorlar. Dizini bir etikete dönüştürmek şu etikete göre düşüyor :(
Darren

Veri çerçevesinin ortasında sürekli olarak 100 sütun bırakmak zorunda kalırsam, sütunlar nasıl endekslenir
Sai Kiran

113

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=Trueveri ç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)

3
Yerinde argüman ne için?
sidpat

12
Eğer kullanmıyorsanız inplace=Trueo zaman yapmanız gerekecektir df = df.drop()Eğer değişim görmek istiyorsanız dfkendisi.
muon

Veri çerçevesinin ortasında sürekli 100 sütun bırakmak zorunda kalırsam, nasıl dizin dizin.
Sai Kiran

36

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ı.


1
Sen benim kahramanımsın. Bunu çok uzun süre yapmanın akıllıca bir yolunu düşünmeye çalışıyordu.
ATK7474

5

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)

4

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.


3

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)

1

İ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)

Referans


-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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.