Python, Pandas, Numpy를 이용한 Pandas 데이터프레임 열의 고유값 계산 (Qlik 유사 방식)
unique() 함수 사용:
import pandas as pd
# 데이터프레임 생성
df = pd.DataFrame({'col1': ['a', 'b', 'c', 'b', 'a', 'c', 'd']})
# 고유값 목록 출력
unique_values = df['col1'].unique()
# 고유값 갯수 출력
unique_values_count = len(unique_values)
print(f"고유값 목록: {unique_values}")
print(f"고유값 갯수: {unique_values_count}")
# nunique() 함수 사용
unique_values_count = df['col1'].nunique()
print(f"고유값 갯수: {unique_values_count}")
value_counts() 함수 사용:
# value_counts() 함수 사용
value_counts = df['col1'].value_counts()
# 고유값 갯수 출력
unique_values_count = value_counts.shape[0]
print(f"고유값 갯수: {unique_values_count}")
NumPy를 이용한 방법:
import numpy as np
# unique() 함수 사용
unique_values = np.unique(df['col1'])
# 고유값 갯수 출력
unique_values_count = len(unique_values)
print(f"고유값 목록: {unique_values}")
print(f"고유값 갯수: {unique_values_count}")
Qlik와의 비교:
Qlik Sense에서도 Unique()
함수를 사용하여 데이터프레임 열의 고유값을 계산할 수 있습니다.
Unique(col1)
Pandas와 Qlik 모두 유사한 방식으로 고유값을 계산하지만, Qlik은 훨씬 더 직관적인 인터페이스를 제공하여 데이터 분석을 더욱 용이하게 합니다.
참고:
- 위 코드는 Python 3.x 버전에서 실행됩니다.
- Pandas, NumPy 라이브러리가 설치되어 있어야 합니다.
예제 코드
import pandas as pd
# 데이터프레임 생성
df = pd.DataFrame({
'col1': ['a', 'b', 'c', 'b', 'a', 'c', 'd'],
'col2': [1, 2, 3, 2, 1, 3, 4],
'col3': ['apple', 'banana', 'orange', 'banana', 'apple', 'orange', 'grape']
})
# ## 1. `unique()` 함수 사용
# col1 열의 고유값 목록 출력
unique_values_col1 = df['col1'].unique()
# col2 열의 고유값 목록 출력
unique_values_col2 = df['col2'].unique()
# col3 열의 고유값 목록 출력
unique_values_col3 = df['col3'].unique()
# 출력 결과
print(f"col1 고유값 목록: {unique_values_col1}")
print(f"col2 고유값 목록: {unique_values_col2}")
print(f"col3 고유값 목록: {unique_values_col3}")
# ## 2. `nunique()` 함수 사용
# 각 열의 고유값 갯수 출력
unique_values_count_col1 = df['col1'].nunique()
unique_values_count_col2 = df['col2'].nunique()
unique_values_count_col3 = df['col3'].nunique()
# 출력 결과
print(f"col1 고유값 갯수: {unique_values_count_col1}")
print(f"col2 고유값 갯수: {unique_values_count_col2}")
print(f"col3 고유값 갯수: {unique_values_count_col3}")
# ## 3. `value_counts()` 함수 사용
# col1 열의 값별 갯수 출력
value_counts_col1 = df['col1'].value_counts()
# col2 열의 값별 갯수 출력
value_counts_col2 = df['col2'].value_counts()
# col3 열의 값별 갯수 출력
value_counts_col3 = df['col3'].value_counts()
# 출력 결과
print(f"col1 값별 갯수: {value_counts_col1}")
print(f"col2 값별 갯수: {value_counts_col2}")
print(f"col3 값별 갯수: {value_counts_col3}")
col1 고유값 목록: ['a', 'b', 'c', 'd']
col2 고유값 목록: [1, 2, 3, 4]
col3 고유값 목록: ['apple', 'banana', 'orange', 'grape']
col1 고유값 갯수: 4
col2 고유값 갯수: 4
col3 고유값 갯수: 4
col1 값별 갯수:
a 2
b 2
c 2
d 1
Name: col1, dtype: int64
col2 값별 갯수:
1 2
2 2
3 2
4 1
Name: col2, dtype: int64
col3 값별 갯수:
apple 2
banana 2
orange 2
grape 1
Name: col3, dtype: int64
Pandas 데이터프레임에서 특정 열의 고유값 계산을 위한 대체 방법
groupby() 함수 사용:
# col1 열의 고유값 갯수 출력
unique_values_count_col1 = df['col1'].groupby('col1').size().shape[0]
# col2 열의 고유값 갯수 출력
unique_values_count_col2 = df['col2'].groupby('col2').size().shape[0]
# col3 열의 고유값 갯수 출력
unique_values_count_col3 = df['col3'].groupby('col3').size().shape[0]
# 출력 결과
print(f"col1 고유값 갯수: {unique_values_count_col1}")
print(f"col2 고유값 갯수: {unique_values_count_col2}")
print(f"col3 고유값 갯수: {unique_values_count_col3}")
set() 함수 사용:
# col1 열의 고유값 갯수 출력
unique_values_count_col1 = len(set(df['col1']))
# col2 열의 고유값 갯수 출력
unique_values_count_col2 = len(set(df['col2']))
# col3 열의 고유값 갯수 출력
unique_values_count_col3 = len(set(df['col3']))
# 출력 결과
print(f"col1 고유값 갯수: {unique_values_count_col1}")
print(f"col2 고유값 갯수: {unique_values_count_col2}")
print(f"col3 고유값 갯수: {unique_values_count_col3}")
lambda 함수 사용:
# col1 열의 고유값 갯수 출력
unique_values_count_col1 = df['col1'].apply(lambda x: len(set(x))).sum()
# col2 열의 고유값 갯수 출력
unique_values_count_col2 = df['col2'].apply(lambda x: len(set(x))).sum()
# col3 열의 고유값 갯수 출력
unique_values_count_col3 = df['col3'].apply(lambda x: len(set(x))).sum()
# 출력 결과
print(f"col1 고유값 갯수: {unique_values_count_col1}")
print(f"col2 고유값 갯수: {unique_values_count_col2}")
print(f"col3 고유값 갯수: {unique_values_count_col3}")
for 루프 사용:
# col1 열의 고유값 갯수
unique_values_count_col1 = 0
unique_values_col1_set = set()
for value in df['col1']:
if value not in unique_values_col1_set:
unique_values_col1_set.add(value)
unique_values_count_col1 += 1
# col2 열의 고유값 갯수
unique_values_count_col2 = 0
unique_values_col2_set = set()
for value in df['col2']:
if value not in unique_values_col2_set:
unique_values_col2_set.add(value)
unique_values_count_col2 += 1
# col3 열의 고유값 갯수
unique_values_count_col3 = 0
unique_values_col3_set = set()
for value in df['col3']:
if value not in unique_values_col3_set:
unique_values_col3_set.add(value)
unique_values_count_col3 += 1
# 출력 결과
print(f"col1 고유값 갯수: {unique_values_count_col1}")
print(f"col2 고유값 갯수: {unique_values_count_col2}")
print(f"col3 고유값 갯수: {unique_values_count_col3}")
python pandas numpy