programing

열 이름을 기준으로 여러 열 삭제

lastmoon 2023. 7. 21. 21:52
반응형

열 이름을 기준으로 여러 열 삭제

데이터가 몇 개 있는데 가져올 때 다음과 같은 불필요한 열이 표시됩니다.이 모든 것을 쉽게 삭제할 수 있는 방법을 찾고 있습니다.

'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

반응형