열 이름을 기준으로 여러 열 삭제
데이터가 몇 개 있는데 가져올 때 다음과 같은 불필요한 열이 표시됩니다.이 모든 것을 쉽게 삭제할 수 있는 방법을 찾고 있습니다.
'Unnamed: 24', 'Unnamed: 25', 'Unnamed: 26', 'Unnamed: 27',
'Unnamed: 28', 'Unnamed: 29', 'Unnamed: 30', 'Unnamed: 31',
'Unnamed: 32', 'Unnamed: 33', 'Unnamed: 34', 'Unnamed: 35',
'Unnamed: 36', 'Unnamed: 37', 'Unnamed: 38', 'Unnamed: 39',
'Unnamed: 40', 'Unnamed: 41', 'Unnamed: 42', 'Unnamed: 43',
'Unnamed: 44', 'Unnamed: 45', 'Unnamed: 46', 'Unnamed: 47',
'Unnamed: 48', 'Unnamed: 49', 'Unnamed: 50', 'Unnamed: 51',
'Unnamed: 52', 'Unnamed: 53', 'Unnamed: 54', 'Unnamed: 55',
'Unnamed: 56', 'Unnamed: 57', 'Unnamed: 58', 'Unnamed: 59',
'Unnamed: 60'
그것들은 0-인덱스로 색인화되어 있어서 저는 다음과 같은 것을 시도했습니다.
df.drop(df.columns[[22, 23, 24, 25,
26, 27, 28, 29, 30, 31, 32 ,55]], axis=1, inplace=True)
하지만 이것은 그다지 효율적이지 않습니다.나는 루프를 위해 몇 개를 쓰려고 했지만 이것은 나에게 나쁜 판다 행동이라는 인상을 주었습니다.그래서 저는 여기서 질문을 합니다.
저는 비슷한 예를 몇 가지 보았습니다(팬더에 여러 개의 열을 놓으십시오). 하지만 이것은 제 질문에 대한 답이 아닙니다.
가장 간단한 접근법은 다음과 같습니다.
yourdf.drop(['columnheading1', 'columnheading2'], axis=1, inplace=True)
비효율적이라는 것이 무슨 뜻인지는 모르겠지만 타이핑의 측면에서 관심 있는 콜을 선택하고 df에 다시 할당하는 것이 더 쉬울 수 있습니다.
df = df[cols_of_interest]
어디에cols_of_interest
관심 있는 열 목록입니다.
또는 열을 잘라 다음으로 전달할 수 있습니다.drop
:
df.drop(df.ix[:,'Unnamed: 24':'Unnamed: 60'].head(0).columns, axis=1)
호출:head
데이터보다는 열 이름에만 관심이 있기 때문에 행을 0개만 선택합니다.
갱신하다
다른 방법:다음의 부울 마스크를 사용하는 것이 더 간단합니다.str.contains
반전하여 열을 마스킹합니다.
In [2]:
df = pd.DataFrame(columns=['a','Unnamed: 1', 'Unnamed: 1','foo'])
df
Out[2]:
Empty DataFrame
Columns: [a, Unnamed: 1, Unnamed: 1, foo]
Index: []
In [4]:
~df.columns.str.contains('Unnamed:')
Out[4]:
array([ True, False, False, True], dtype=bool)
In [5]:
df[df.columns[~df.columns.str.contains('Unnamed:')]]
Out[5]:
Empty DataFrame
Columns: [a, foo]
Index: []
개인적으로 좋아하는 것으로, 여기서 본 답변보다 쉽습니다(여러 개의 열에 대해)
df.drop(df.columns[22:56], axis=1, inplace=True)
이것은 아마도 여러분이 원하는 것을 할 수 있는 좋은 방법일 것입니다.헤더에 '이름 없음'이 포함된 모든 열이 삭제됩니다.
for col in df.columns:
if 'Unnamed' in col:
del df[col]
한 줄로 한 번에 실행할 수 있습니다.
df.drop([col for col in df.columns if "Unnamed" in col], axis=1, inplace=True)
여기에는 위의 솔루션보다 개체 이동/복사가 적게 포함됩니다.
이 솔루션이 아직 언급되지는 않았지만 한 가지 방법은 다음과 같습니다.
>>> df = pd.DataFrame(columns=['A','B','C','D'])
>>> df
Empty DataFrame
Columns: [A, B, C, D]
Index: []
>>> to_remove = ['A','C']
>>> df = df[df.columns.difference(to_remove)]
>>> df
Empty DataFrame
Columns: [B, D]
Index: []
축을 0 또는 1로 지정하여 열 이름을 목록으로 전달할 수 있습니다.
- 축=1: 행을 따라
- 축=0: 열을 따라
기본적으로 축 =
data.drop(["Colname1","Colname2","Colname3","Colname4"],axis=1)
간편하고 간편합니다.22일 이후 모든 컬럼을 제거합니다.
df.drop(columns=df.columns[22:]) # love it
다음은 저에게 도움이 되었습니다.
for col in df:
if 'Unnamed' in col:
#del df[col]
print col
try:
df.drop(col, axis=1, inplace=True)
except Exception:
pass
df = df[[col for col in df.columns if not ('Unnamed' in col)]]
이름 없음'으로 시작하는 모든 열을 삭제할 수 있습니다.
df.loc[:, ~df.columns.str.startswith('Unnamed')]
언급URL : https://stackoverflow.com/questions/28538536/deleting-multiple-columns-based-on-column-names
'programing' 카테고리의 다른 글
Oracle에 대해 실행된 쿼리를 보려면 어떻게 해야 합니까? (0) | 2023.07.21 |
---|---|
목록의 Python os.path.join() (0) | 2023.07.21 |
사전을 만들 때 장고 모델에게 전달할 수 있습니까? (0) | 2023.07.21 |
Python 단위 테스트에서 메서드가 호출되었다고 주장합니다. (0) | 2023.07.21 |
SqlAlchemy - 관계 속성별 필터링 (0) | 2023.07.21 |