Python, Pandas, DataFrame에서 특정 선택된 열을 새 DataFrame으로 복사하여 추출하기
데이터 분석에서 특정 열을 새 DataFrame으로 복사하여 추출하는 작업은 매우 중요합니다. 이 기능은 여러 가지 용도로 활용됩니다. 예를 들어:
- 특정 열에 대한 분석을 수행
- 특정 열을 기반으로 데이터를 필터링
- 특정 열을 다른 DataFrame에 병합
Pandas를 사용한 추출 방법
다음은 Pandas를 사용하여 특정 선택된 열을 새 DataFrame으로 복사하여 추출하는 방법입니다.
방법 1: loc
속성 사용
# 원본 DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})
# 추출할 열 선택
selected_columns = ['B', 'C']
# 새 DataFrame 생성
new_df = df.loc[:, selected_columns]
# 결과 확인
print(new_df)
# 출력
# B C
# 0 4 7
# 1 5 8
# 2 6 9
방법 2: []
연산자 사용
# 원본 DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})
# 추출할 열 선택
selected_columns = ['B', 'C']
# 새 DataFrame 생성
new_df = df[selected_columns]
# 결과 확인
print(new_df)
# 출력
# B C
# 0 4 7
# 1 5 8
# 2 6 9
방법 3: filter
메서드 사용
# 원본 DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})
# 추출할 열 선택
selected_columns = ['B', 'C']
# 새 DataFrame 생성
new_df = df.filter(like=selected_columns)
# 결과 확인
print(new_df)
# 출력
# B C
# 0 4 7
# 1 5 8
# 2 6 9
주의 사항
- 위 코드는 모두 새 DataFrame을 복사하여 생성합니다. 원본 DataFrame을 변경하지 않습니다.
- 여러 열을 선택할 때는 리스트 형태로 열 이름을 지정해야 합니다.
filter
메서드를 사용할 때는 정규 표현식을 사용하여 열 이름을 선택할 수도 있습니다.
예제 코드
# 원본 DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9], 'D': ['a', 'b', 'c']})
# ### 방법 1: `loc` 속성 사용
# 추출할 열 선택
selected_columns = ['B', 'C']
# 새 DataFrame 생성
new_df_loc = df.loc[:, selected_columns]
# 결과 확인
print('### 방법 1: `loc` 속성 사용')
print(new_df_loc)
# ### 방법 2: `[]` 연산자 사용
# 새 DataFrame 생성
new_df_list = df[selected_columns]
# 결과 확인
print('### 방법 2: `[]` 연산자 사용')
print(new_df_list)
# ### 방법 3: `filter` 메서드 사용
# 새 DataFrame 생성
new_df_filter = df.filter(like=selected_columns)
# 결과 확인
print('### 방법 3: `filter` 메서드 사용')
print(new_df_filter)
출력 결과:
### 방법 1: `loc` 속성 사용
B C
0 4 7
1 5 8
2 6 9
### 방법 2: `[]` 연산자 사용
B C
0 4 7
1 5 8
2 6 9
### 방법 3: `filter` 메서드 사용
B C
0 4 7
1 5 8
2 6 9
추가 예시:
# 특정 값보다 큰 값만 추출
new_df = df.loc[df['B'] > 5, :]
# 결과 확인
print(new_df)
# 다른 DataFrame
df2 = pd.DataFrame({'E': [10, 11, 12], 'F': [13, 14, 15]})
# 병합
new_df = pd.merge(df, df2, on='B')
# 결과 확인
print(new_df)
특정 선택된 열을 새 DataFrame으로 추출하는 대체 방법
assign 메서드 사용:
# 새로운 열을 생성하고 값을 할당
new_df = df.assign(new_column=df['B'] + df['C'])
# 특정 열 추출
new_df = new_df[['B', 'C', 'new_column']]
# 결과 확인
print(new_df)
copy 메서드 사용:
# 원본 DataFrame 복사
new_df = df.copy()
# 특정 열 추출
new_df = new_df[selected_columns]
# 결과 확인
print(new_df)
list comprehension 사용:
# 특정 열 선택
selected_columns = ['B', 'C']
# 새 DataFrame 생성
new_df = pd.DataFrame([list(row) for row in df[selected_columns].values])
# 결과 확인
print(new_df)
iterrows 메서드 사용:
# 새 DataFrame 생성
new_df = pd.DataFrame()
# 특정 열 추출
for row in df.itertuples():
new_df = new_df.append(pd.DataFrame([[row.B, row.C]], columns=selected_columns))
# 결과 확인
print(new_df)
lambda 함수 사용:
# 새 DataFrame 생성
new_df = df.loc[:, df.columns.map(lambda x: x in selected_columns)]
# 결과 확인
print(new_df)
# 새 DataFrame 생성
def g(df):
return df[selected_columns]
new_df = df.apply(g)
# 결과 확인
print(new_df)
NumPy 사용:
# NumPy 배열 생성
new_df = np.array(df[selected_columns])
# DataFrame으로 변환
new_df = pd.DataFrame(new_df)
# 결과 확인
print(new_df)
주의 사항:
선택 방법
상황에 따라 가장 적합한 방법을 선택해야 합니다. 일반적으로 다음과 같은 경우에 각 방법을 사용하는 것이 좋습니다.
loc
속성 사용: 가장 간단하고 효율적인 방법[]
연산자 사용: 간단하지만, 열 이름에 특수 문자가 포함된 경우 사용할 수 없음assign
메서드 사용: 새로운 열을 생성하고 값을 할당할 때 유용copy
메서드 사용: 원본 DataFrame을 복사하여 사용할 때 유용list comprehension
사용: 간단하지만, 느릴 수 있음iterrows
메서드 사용: 매우 유연하지만, 느릴 수 있음lambda
함수 사용: 간단하지만, 읽기 어려울 수 있음apply
메서드 사용: 사용자 정의 함수를 사용할 때 유용- NumPy 사용: NumPy 배열을 사용하는 경우 유용
python pandas dataframe