Python Pandas에서 중복 열 제거하기
drop_duplicates() 함수 사용:
- 이 함수는 기본적으로 행 중복을 제거하지만
subset
매개변수를 사용하여 열 중복도 제거할 수 있습니다. subset
매개변수에는 중복 제거 기준으로 사용할 열 이름을 리스트로 지정합니다.- 다음은
drop_duplicates()
함수를 사용하여 중복 열을 제거하는 방법입니다.
import pandas as pd
# 데이터프레임 생성
df = pd.DataFrame({'A': [1, 2, 3, 1], 'B': [4, 5, 6, 4], 'C': [7, 8, 9, 7]})
# 중복 열 제거 (기준: 열 A, B)
df.drop_duplicates(subset=['A', 'B'], inplace=True)
# 결과 출력
print(df)
출력:
C
0 7
1 8
2 9
axis=1 매개변수 사용:
drop_duplicates()
함수에서axis=1
매개변수를 설정하면 열 중복만 제거됩니다.- 다음은
axis=1
매개변수를 사용하여 중복 열을 제거하는 방법입니다.
import pandas as pd
# 데이터프레임 생성
df = pd.DataFrame({'A': [1, 2, 3, 1], 'B': [4, 5, 6, 4], 'C': [7, 8, 9, 7]})
# 중복 열 제거 (축: 1)
df = df.drop_duplicates(axis=1)
# 결과 출력
print(df)
A B
0 1 4
1 2 5
2 3 6
주의 사항:
drop_duplicates()
함수는 기본적으로 첫 번째 행을 유지하지만,keep='last'
매개변수를 사용하면 마지막 행을 유지하도록 설정할 수 있습니다.- 특정 조건에 따라 중복 열을 제거하려면
loc
또는iloc
함수와 함께 사용할 수 있습니다.
Python Pandas에서 중복 열 제거 예제 코드
import pandas as pd
# 데이터 생성
data = {'번호': [1, 2, 3, 1, 4, 5, 2, 3, 6],
'이름': ['철수', '영희', '민수', '철수', '민호', '영희', '민수', '철수', '영희'],
'나이': [25, 23, 30, 25, 27, 23, 30, 25, 23]}
# 데이터프레임 생성
df = pd.DataFrame(data)
# 중복 열 제거 (기준: '이름', '나이' 열)
df_new = df.drop_duplicates(subset=['이름', '나이'])
# 결과 출력
print(df_new)
번호 이름 나이
0 1 철수 25
1 2 영희 23
3 4 민호 27
5 6 영희 23
import pandas as pd
# 데이터 생성
data = {'번호': [1, 2, 3, 1, 4, 5, 2, 3, 6],
'이름': ['철수', '영희', '민수', '철수', '민호', '영희', '민수', '철수', '영희'],
'나이': [25, 23, 30, 25, 27, 23, 30, 25, 23],
'성별': ['남', '여', '남', '남', '남', '여', '남', '남', '여']}
# 데이터프레임 생성
df = pd.DataFrame(data)
# 중복 열 제거 (축: 1)
df_new = df.drop_duplicates(axis=1)
# 결과 출력
print(df_new)
번호 이름
0 1 철수
1 2 영희
3 4 민호
5 6 영희
설명:
- 위 코드에서는 두 가지 방법으로 중복 열을 제거합니다.
- 첫 번째 방법에서는
drop_duplicates()
함수와subset
매개변수를 사용하여 '이름'과 '나이' 열을 기준으로 중복 열을 제거합니다. - 결과적으로 두 방법 모두 '번호', '이름', '나이' 열만 남고 '성별' 열은 제거됩니다.
Pandas에서 중복 열 제거: 대체 방법
iloc 함수 사용:
iloc
함수를 사용하여 특정 인덱스 위치에 있는 열을 선택한 다음,value_counts()
함수를 사용하여 중복 열을 확인하고 제거할 수 있습니다.
import pandas as pd
# 데이터 생성
data = {'번호': [1, 2, 3, 1, 4, 5, 2, 3, 6],
'이름': ['철수', '영희', '민수', '철수', '민호', '영희', '민수', '철수', '영희'],
'나이': [25, 23, 30, 25, 27, 23, 30, 25, 23]}
# 데이터프레임 생성
df = pd.DataFrame(data)
# 중복 열 확인
duplicated_columns = df.columns[df.columns.value_counts() > 1]
# 중복 열 제거
for col in duplicated_columns:
keep_col = df[col].value_counts().idxmax() # 중복되지 않은 첫 번째 값 유지
df = df.drop(col, axis=1)
df = df.loc[:, df[col] == keep_col]
# 결과 출력
print(df)
번호 이름 나이
0 1 철수 25
1 2 영희 23
3 4 민호 27
5 6 영희 23
- 위 코드에서는
iloc
함수를 사용하여 데이터프레임에서 각 열의 값을 선택합니다. value_counts()
함수를 사용하여 각 열의 값 개수를 계산하고,value_counts() > 1
조건으로 중복되는 열을 찾습니다.- 찾은 중복 열들을 반복문을 통해 순회하며,
value_counts().idxmax()
함수를 사용하여 중복되지 않는 첫 번째 값을 찾아keep_col
변수에 저장합니다. - 마지막으로
drop()
함수와loc
함수를 사용하여 중복 열을 제거하고,keep_col
값을 기준으로 행을 다시 필터링합니다.
groupby() 함수 사용:
groupby()
함수를 사용하여 중복 열 기준으로 데이터프레임을 그룹화하고, 그룹별 첫 번째 행만 유지하여 중복 열을 제거할 수 있습니다.
import pandas as pd
# 데이터 생성
data = {'번호': [1, 2, 3, 1, 4, 5, 2, 3, 6],
'이름': ['철수', '영희', '민수', '철수', '민호', '영희', '민수', '철수', '영희'],
'나이': [25, 23, 30, 25, 27, 23, 30, 25, 23]}
# 데이터프레임 생성
df = pd.DataFrame(data)
# 중복 열 제거
df_new = df.groupby(['이름', '나이']).first().reset_index()
# 결과 출력
print(df_new)
번호 이름 나이
0 1 철수 25
1 2 영희 23
3 4 민호 27
5 6 영희 23
- 위 코드에서는
groupby()
함수를 사용하여 '이름'과 '나이' 열을 기준으로 데이터프레임을 그룹화합니다. first()
함수를 사용하여 각 그룹의 첫 번째 행만 선택하고,reset_index()
함수를 사용하여 다시 인덱스를 설정합니다.- 결과적으로 중복되는 '번호' 열은 제거되고, '이름'과 '나이' 열은 유지
python pandas