선택한 특정 열을 새 DataFrame에 복사본으로 추출


185

4 개의 열이있는 팬더 DataFrame이 있고 새로운 DataFrame 만들고 싶습니다. 열 세 가지가 있습니다. 이 질문은 다음과 유사합니다. 데이터 프레임에서 특정 열을 추출 하지만 R이 아닌 팬더의 경우 다음 코드는 작동하지 않으며 오류가 발생하며 판다 닉 방식이 아닙니다.

import pandas as pd
old = pd.DataFrame({'A' : [4,5], 'B' : [10,20], 'C' : [100,50], 'D' : [-30,-50]})
new = pd.DataFrame(zip(old.A, old.C, old.D)) # raises TypeError: data argument can't be an iterator 

판다 닉 방법은 무엇입니까?

답변:


359

이것을하는 방법이 있으며 실제로 R과 비슷하게 보입니다.

new = old[['A', 'C', 'D']].copy()

여기서는 원래 데이터 프레임에서 원하는 열을 선택하고 해당 열에 대한 변수를 만듭니다. 새로운 데이터 프레임을 수정하고 싶을 .copy()때는SettingWithCopyWarning .

다른 방법은 filter기본적으로 사본을 작성하는 것입니다.

new = old.filter(['A','B','D'], axis=1)

마지막으로 원본 데이터 프레임의 열 수에 따라 a를 사용하여 이것을 표현하는 것이 더 간결 할 수 있습니다 drop(기본적으로 사본이 생성됨).

new = old.drop('B', axis=1)

20
하나의 열만 복사하는 경우주의 사항 : old[['A']].copy()에서 새 데이터 프레임을 만들려면 이중 대괄호가 필요합니다. 참고 old['A'].copy()만 시리즈를 만들 것입니다.
intotecho


8

또 다른 간단한 방법은 다음과 같습니다.

new = pd.DataFrame([old.A, old.B, old.C]).transpose()

여기서 old.column_name당신에게 시리즈를 제공 할 것입니다. 유지하려는 모든 열 계열의 목록을 만들어 DataFrame 생성자에 전달하십시오. 모양을 조정하려면 조옮김을해야합니다.

In [14]:pd.DataFrame([old.A, old.B, old.C]).transpose()
Out[14]: 
   A   B    C
0  4  10  100
1  5  20   50

column_name에 특수 문자가 있으면 작동하지 않습니다.
jimh

오, 그런 생각을하지 않았다
명중

3

일반 기능 양식

def select_columns(data_frame, column_names):
    new_frame = data_frame.loc[:, column_names]
    return new_frame

위의 문제에 해당

selected_columns = ['A', 'C', 'D']
new = select_columns(old, selected_columns)

2

새로운 데이터 프레임을 원한다면 :

import pandas as pd
old = pd.DataFrame({'A' : [4,5], 'B' : [10,20], 'C' : [100,50], 'D' : [-30,-50]})
new=  old[['A', 'C', 'D']]

1

내가 알 수있는 한 필터 기능을 사용할 때 반드시 축을 지정할 필요는 없습니다.

new = old.filter(['A','B','D'])

와 동일한 데이터 프레임을 반환

new = old.filter(['A','B','D'], axis=1)

1

색인 별 열 :

# selected column index: 1, 6, 7
new = old.iloc[: , [1, 6, 7]].copy() 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.