DataFrame에서 열을 삭제할 때 다음을 사용합니다.
del df['column_name']
그리고 이것은 훌륭하게 작동합니다. 왜 다음을 사용할 수 없습니까?
del df.column_name
로 열 / 시리즈에 액세스 할 수 있기 때문에 이것이 df.column_name
작동 할 것으로 예상했습니다.
답변
짐작했듯이 올바른 구문은
del df['column_name']
del df.column_name
파이썬의 구문상의 한계로 인해 간단 하게 작업 하기가 어렵습니다 . 파이썬에 의해 표지 아래로 del df[name]
번역됩니다 df.__delitem__(name)
.
답변
팬더에서 이것을 수행하는 가장 좋은 방법은 다음을 사용하는 것입니다 drop
.
df = df.drop('column_name', 1)
축 번호 1
는 어디에 있습니까 ( 행과 열의 경우).0
1
재할 당하지 않고 열을 삭제하려면 df
다음을 수행하십시오.
df.drop('column_name', axis=1, inplace=True)
마지막으로 column label 대신 열 번호 를 기준 으로 삭제하려면 첫 번째, 두 번째 및 네 번째 열과 같이 삭제하십시오.
df = df.drop(df.columns[[0, 1, 3]], axis=1) # df.columns is zero-based pd.Index
열에 대한 “텍스트”구문으로 작업하기 :
df.drop(['column_nameA', 'column_nameB'], axis=1, inplace=True)
답변
사용하다:
columns = ['Col1', 'Col2', ...]
df.drop(columns, inplace=True, axis=1)
하나 이상의 열이 제자리에서 삭제됩니다. 참고 inplace=True
팬더 추가되었다 V0.13 및 이전 버전에서 작동하지 않습니다. 이 경우 결과를 다시 할당해야합니다.
df = df.drop(columns, axis=1)
답변
인덱스로 삭제
첫 번째, 두 번째 및 네 번째 열을 삭제하십시오.
df.drop(df.columns[[0,1,3]], axis=1, inplace=True)
첫 번째 열을 삭제하십시오.
df.drop(df.columns[[0]], axis=1, inplace=True)
inplace
사본을 만들지 않고 원본 데이터를 수정할 수 있도록 선택적 매개 변수 가 있습니다.
터지는
열 삭제 column-name
:
df.pop('column-name')
예 :
df = DataFrame.from_items([('A', [1, 2, 3]), ('B', [4, 5, 6]), ('C', [7,8, 9])], orient='index', columns=['one', 'two', 'three'])
print df
:
one two three
A 1 2 3
B 4 5 6
C 7 8 9
df.drop(df.columns[[0]], axis=1, inplace=True)
print df
:
two three
A 2 3
B 5 6
C 8 9
three = df.pop('three')
print df
:
two
A 2
B 5
C 8
답변
여기에 대부분의 대답으로 놓친 실제 질문은 다음과 같습니다.
왜 사용할 수 del df.column_name
없습니까?
처음에는 문제를 이해해야하는데,이를 위해서는 파이썬 매직 메소드 를 사용해야 합니다 .
Wes가 그의 답변에서 지적한 것처럼 열을 떨어 뜨리기 위해 팬더에서 구현 되는 del df['column']
python magic 방법에 매핑 됩니다.df.__delitem__('column')
그러나 파이썬 매직 메소드 에 대한 위의 링크에서 지적했듯이 :
사실,
__del__
그것이 불리한 불안정한 환경 때문에 거의 사용해서는 안됩니다. 조심해서 사용하십시오!
del df['column_name']
사용하거나 장려해서는 안된다고 주장 할 수 있으며 따라서 del df.column_name
고려해서는 안됩니다.
그러나 이론적으로 는 magic 방법을del df.column_name
사용 하여__delattr__
팬더에서 작동하도록 구현할 수 있습니다 . 그러나 이것은 특정 문제, del df['column_name']
구현에 이미 있지만 적은 정도의 문제를 유발합니다 .
예제 문제
“dtypes”또는 “columns”라는 데이터 프레임에 열을 정의하면 어떻게됩니까?
그런 다음이 열을 삭제한다고 가정합니다.
del df.dtypes
__delattr__
“dtypes”속성 또는 “dtypes”열을 삭제해야하는 것처럼 메소드를 혼란스럽게 만듭니다 .
이 문제 뒤에 건축 질문
- 데이터 프레임은 열 모음 입니까?
- 데이터 프레임은 행 의 모음 입니까?
- 열 이 데이터 프레임 의 속성 입니까?
팬더 답변 :
- 예, 모든면에서
- 아니요, 그러나 원하는 경우
.ix
,.loc
또는.iloc
메소드를 사용할 수 있습니다 . - 아마도 데이터 를 읽고 싶 습니까? 그리고 네 , 하지 않는 속성의 이름은 이미 dataframe에 속하는 다른 속성에 의해 취해진 다. 데이터 를 수정 하시겠습니까? 그리고 더 .
TLDR;
del df.column_name
팬더는 이러한 종류의 인지 불협화음 이 사용자에게 발생하지 않도록 다시 생각 해야하는 상당히 자라 난 아키텍처를 가지고 있기 때문에 할 수 없습니다 .
팁 :
df.column_name을 사용하지 마십시오. 예쁘지 만인지 부조화를 유발합니다.
여기에 맞는 Zen of Python 인용문 :
열을 삭제하는 방법에는 여러 가지가 있습니다.
그것을하는 명백한 방법이 있어야합니다.
열은 때때로 속성이지만 때로는 그렇지 않습니다.
특별한 경우는 규칙을 어길만큼 특별하지 않습니다.
del df.dtypes
dtypes 속성 또는 dtypes 열을 삭제 합니까 ?
모호함에 직면하여 추측하려는 유혹을 거부하십시오.
답변
추가 된 항목은 열이있는 경우에만 열 을 삭제 하는 기능 입니다. 이 방법으로 더 많은 사용 사례를 처리 할 수 있으며 전달 된 레이블에서 기존 열만 삭제합니다.
예를 들어 errors = ‘ignore’를 추가하십시오 .
df.drop(['col_name_1', 'col_name_2', ..., 'col_name_N'], inplace=True, axis=1, errors='ignore')
- 이것은 팬더 0.16.1 이후의 새로운 기능입니다. 설명서는 여기에 있습니다 .
답변
버전 0.16.1부터는 할 수 있습니다
df.drop(['column_name'], axis = 1, inplace = True, errors = 'ignore')