티스토리 뷰

개발/파이썬

pandas에서 열 집합 선택/제외

맨날치킨 2022. 11. 26. 13:05
반응형

Stack Overflow에 자주 검색, 등록되는 문제들과 제가 개발 중 찾아 본 문제들 중에서 나중에도 찾아 볼 것 같은 문제들을 정리하고 있습니다.

Stack Overflow에서 가장 먼저 확인하게 되는 가장 높은 점수를 받은 Solution과 현 시점에 도움이 될 수 있는 가장 최근에 업데이트(최소 점수 확보)된 Solution을 각각 정리하였습니다.

 

아래 word cloud를 통해 이번 포스팅의 주요 키워드를 미리 확인하세요.

Selecting/excluding sets of columns in pandas

pandas에서 열 집합 선택/제외

 문제 내용 

I would like to create views or dataframes from an existing dataframe based on column selections.

열 선택을 기반으로 기존 데이터 프레임에서 뷰 또는 데이터 프레임을 생성하려고 합니다.

 

For example, I would like to create a dataframe df2 from a dataframe df1 that holds all columns from it except two of them. I tried doing the following, but it didn't work:

예를 들어, 두 개를 제외한 모든 열을 포함하는 데이터 프레임 df1에서 데이터 프레임 df2를 생성하려고 합니다. 다음을 시도해 보았지만, 작동하지 않았습니다.

 

import numpy as np
import pandas as pd

# Create a dataframe with columns A,B,C and D
df = pd.DataFrame(np.random.randn(100, 4), columns=list('ABCD'))

# Try to create a second dataframe df2 from df with all columns except 'B' and D
my_cols = set(df.columns)
my_cols.remove('B').remove('D')

# This returns an error ("unhashable type: set")
df2 = df[my_cols]

What am I doing wrong? Perhaps more generally, what mechanisms does pandas have to support the picking and exclusions of arbitrary sets of columns from a dataframe?

내가 뭘 잘못하고 있는 거야? 아마도 더 일반적으로, 판다는 데이터 프레임에서 임의의 열 집합의 선택과 제외를 지원하기 위해 어떤 메커니즘을 가지고 있는가?

 

 

 

 높은 점수를 받은 Solution 

You can either Drop the columns you do not need OR Select the ones you need

불필요한 열을 삭제하거나 필요한 열을 선택할 수 있습니다.

 

# Using DataFrame.drop
df.drop(df.columns[[1, 2]], axis=1, inplace=True)

# drop by Name
df1 = df1.drop(['B', 'C'], axis=1)

# Select the ones you want
df1 = df[['a','d']]

 

 

 가장 최근 달린 Solution 

Another option, without dropping or filtering in a loop:

루프에서 삭제하거나 필터링하지 않는 다른 옵션:

 

import numpy as np
import pandas as pd

# Create a dataframe with columns A,B,C and D
df = pd.DataFrame(np.random.randn(100, 4), columns=list('ABCD'))

# include the columns you want
df[df.columns[df.columns.isin(['A', 'B'])]]

# or more simply include columns:
df[['A', 'B']]

# exclude columns you don't want
df[df.columns[~df.columns.isin(['C','D'])]]

# or even simpler since 0.24
# with the caveat that it reorders columns alphabetically 
df[df.columns.difference(['C', 'D'])]

 

 

출처 : https://stackoverflow.com/questions/14940743/selecting-excluding-sets-of-columns-in-pandas

반응형
댓글
공지사항
최근에 올라온 글