int를 사용하여 python dataframe pandas drop column


답변:


167

다음 i과 같이 인덱스에서 열을 삭제할 수 있습니다 .

df.drop(df.columns[i], axis=1)

열에 중복 이름이 있으면 이상하게 작동 할 수 있으므로 삭제하려는 열의 이름을 새 이름으로 바꿀 수 있습니다. 또는 다음과 같이 DataFrame을 다시 할당 할 수 있습니다.

df = df.iloc[:, [j for j, c in enumerate(df.columns) if j != i]]

4
나는 당신이 요점을 놓쳤다 고 생각합니다-그들은 레이블이 아닌 색인으로 떨어 뜨리고 싶습니다. 색인을 레이블로 변환하는 것은 레이블로만 삭제됩니다. (
Darren

데이터 프레임 중간에 연속적인 100 개의 열을 삭제해야하는 경우 열을 인덱싱하는 방법
Sai Kiran

112

다음과 같이 여러 열을 삭제하십시오.

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)

3
적절한 주장은 무엇입니까?
sidpat

12
당신이 사용 inplace=True하지 df = df.drop()않으면 당신은 df그 자체로 변화를보고 싶다면해야 합니다.
muon

데이터 프레임 중간에 연속적인 100 개의 열을 삭제해야하는 경우 열을 인덱싱하는 방법
사이 키란

36

동일한 이름을 가진 여러 열이있는 경우 여기에 제공된 솔루션은 모든 열을 제거하므로 원하는 열이 아닐 수 있습니다. 하나의 인스턴스를 제외한 중복 열을 제거하려는 경우에 해당됩니다. 아래 예제는이 상황을 명확하게합니다.

# 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') 만 제거했습니다.


1
당신은 나의 영웅이다. 너무 오랫동안 이것을 할 수있는 영리한 방법을 생각하려고했습니다.
ATK7474

5

데이터 프레임에서의 위치를 ​​기준으로 열을 식별해야합니다. 예를 들어, 열 번호 2, 3 및 5를 삭제 (del)하려는 경우,

df.drop(df.columns[[2,3,5]], axis = 1)

4

이름이 같은 두 개의 열이있는 경우 간단한 방법 중 하나는 다음과 같이 열 이름을 수동으로 바꾸는 것입니다.

df.columns = ['column1', 'column2', 'column3']

그런 다음 요청 한대로 열 색인을 통해 삭제할 수 있습니다.

df.drop(df.columns[1], axis=1, inplace=True)

df.column[1] 인덱스 1을 삭제합니다.

축 1 = 열이고 축 0 = 행을 기억하십시오.


3

정말로 정수로 (하지만 왜?) 그것을하고 싶다면 사전을 만들 수 있습니다.

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)


-1

이름이 같은 여러 열이있을 수 있으므로 먼저 열의 이름을 바꿔야합니다. 솔루션 코드는 다음과 같습니다.

df.columns=list(range(0,len(df.columns)))
df.drop(columns=[1,2])#drop second and third columns
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.