[ 판다스(Pandas) ] Pandas shape와 columns 속성 완벽 가이드: PySide 테이블 위젯 연동 방법
pandas 라이브러리 소개
pandas는 파이썬에서 데이터 분석을 위한 필수 라이브러리입니다.
특히 표 형태의 데이터를 다루는 데 탁월한 성능을 보여주며,
다양한 형식의 데이터를 쉽게 처리할 수 있습니다.
pandas의 핵심 데이터 구조는 DataFrame입니다.
DataFrame은 행과 열로 구성된 2차원 테이블로,
각 열은 서로 다른 데이터 타입을 가질 수 있습니다.
이는 엑셀 시트와 매우 유사한 구조로, 표 형태의 데이터를 파이썬으로 가져와 처리하기에 이상적입니다.
import pandas as pd
# pandas 버전 확인
print(pd.__version__)
# 간단한 DataFrame 생성 예시
data = {
'이름': ['홍길동', '김철수', '이영희'],
'나이': [25, 30, 28],
'직업': ['개발자', '디자이너', '마케터']
}
df = pd.DataFrame(data)
print(df)
DataFrame 기본 속성과 활용법
DataFrame은 pandas의 핵심 데이터 구조로,
다양한 속성과 메서드를 제공합니다.
이를 통해 데이터를 효율적으로 분석하고 처리할 수 있습니다.
DataFrame 생성 방법
import pandas as pd
import numpy as np
# 1. 딕셔너리로부터 생성
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df1 = pd.DataFrame(data)
# 2. 리스트의 리스트로부터 생성
data = [[1, 4], [2, 5], [3, 6]]
df2 = pd.DataFrame(data, columns=['A', 'B'])
# 3. NumPy 배열로부터 생성
array = np.array([[1, 4], [2, 5], [3, 6]])
df3 = pd.DataFrame(array, columns=['A', 'B'])
기본 정보 확인하기
# 데이터 상위 5행 확인
print(df.head())
# 데이터 하위 5행 확인
print(df.tail())
# 데이터 기본 정보 확인
print(df.info())
# 수치형 데이터의 기본 통계 정보
print(df.describe())
shape 속성 이해하기
`shape` 속성은 DataFrame의 차원을 나타내는 튜플을 반환합니다.
이 튜플의 첫 번째 요소는 행(rows)의 수, 두 번째 요소는 열(columns)의 수를 나타냅니다.
shape 속성 활용 예시
import pandas as pd
# 샘플 DataFrame 생성
data = {
'이름': ['홍길동', '김철수', '이영희', '박지성'],
'나이': [25, 30, 28, 35],
'직업': ['개발자', '디자이너', '마케터', '기획자'],
'연봉': [5000, 4500, 4800, 6000]
}
df = pd.DataFrame(data)
# shape 속성 사용
rows, columns = df.shape
print(f"행 수: {rows}, 열 수: {columns}")
# 응용: 데이터 크기에 따라 다른 처리하기
if rows > 1000:
print("대용량 데이터입니다. 샘플링을 고려하세요.")
else:
print("처리 가능한 크기의 데이터입니다.")
shape 속성은 단순히 행과 열의 개수를 확인하는 것 외에도, 데이터 처리 전략을 수립하는 데 유용합니다. 예를 들어, 대용량 데이터의 경우 전체 데이터를 한 번에 처리하는 대신 샘플링이나 청크 단위 처리를 고려할 수 있습니다.
columns 속성 활용하기
`columns` 속성은 DataFrame의 열 이름(헤더)을 담고 있는 Index 객체를 반환합니다.
이 속성을 통해 열 이름을 확인하거나 변경할 수 있습니다.
columns 속성 기본 사용법
# 열 이름 확인하기
print(df.columns)
# 열 이름 리스트로 변환하기
column_list = list(df.columns)
print(column_list)
# 특정 열 이름이 있는지 확인하기
if '나이' in df.columns:
print("'나이' 열이 존재합니다.")
# 열 이름 변경하기
df.columns = ['Name', 'Age', 'Job', 'Salary']
print(df.columns)
# 특정 열만 이름 변경하기
df = df.rename(columns={'Name': '이름', 'Age': '나이'})
columns를 활용한 데이터 필터링
# 특정 열만 선택하기
selected_df = df[['이름', '나이', '직업']]
# 숫자형 열만 선택하기
numeric_cols = df.select_dtypes(include=['number']).columns
numeric_df = df[numeric_cols]
# 문자열 열만 선택하기
string_cols = df.select_dtypes(include=['object']).columns
string_df = df[string_cols]
고급 데이터 처리 기법
pandas는 데이터 처리를 위한 다양한 고급 기능을 제공합니다.
이러한 기능들을 활용하면 더 효율적으로 데이터를 처리할 수 있습니다.
데이터 필터링과 정렬
# 조건에 따른 필터링
young_people = df[df['나이'] < 30]
# 복합 조건 필터링
developers = df[(df['직업'] == '개발자') & (df['연봉'] > 4500)]
# 정렬하기
sorted_by_age = df.sort_values('나이')
sorted_by_salary_desc = df.sort_values('연봉', ascending=False)
데이터 그룹화와 집계
# 직업별 평균 연봉
avg_salary_by_job = df.groupby('직업')['연봉'].mean()
# 직업별 나이 통계
age_stats_by_job = df.groupby('직업')['나이'].agg(['min', 'max', 'mean'])
# 여러 열에 대한 다양한 집계 함수 적용
summary = df.groupby('직업').agg({
'나이': ['mean', 'min', 'max'],
'연봉': ['mean', 'sum']
})
groupby와 agg 함수를 조합하면 엑셀의 피벗 테이블과 유사한 기능을 구현할 수 있습니다. 이를 통해 데이터의 다양한 측면을 빠르게 분석할 수 있습니다.
PyQt/PySide와 함께 pandas 활용하기
pandas DataFrame을 PySide의 테이블 위젯에 표시하는 방법을 알아보겠습니다.
이를 통해 데이터 분석 결과를 시각적으로 표현할 수 있습니다.
QTableWidget에 DataFrame 표시하기
import pandas as pd
from PySide6.QtWidgets import QTableWidget, QTableWidgetItem
def display_dataframe(table_widget, df):
"""DataFrame을 QTableWidget에 표시합니다."""
# 테이블 크기 설정
rows, columns = df.shape
table_widget.setRowCount(rows)
table_widget.setColumnCount(columns)
# 열 이름 설정
table_widget.setHorizontalHeaderLabels(df.columns)
# 데이터 채우기
for row in range(rows):
for col in range(columns):
value = str(df.iat[row, col]) # iat은 위치 기반 접근 (iloc과 유사)
item = QTableWidgetItem(value)
table_widget.setItem(row, col, item)
# 열 너비 자동 조정
table_widget.resizeColumnsToContents()
# 사용 예시
df = pd.DataFrame({
'이름': ['홍길동', '김철수', '이영희'],
'나이': [25, 30, 28],
'직업': ['개발자', '디자이너', '마케터']
})
# GUI 코드에서 호출
display_dataframe(self.ui.tableWidget, df)
QStandardItemModel을 사용한 방법
import pandas as pd
from PySide6.QtGui import QStandardItemModel, QStandardItem
from PySide6.QtWidgets import QTableView
def dataframe_to_model(df):
"""DataFrame을 QStandardItemModel로 변환합니다."""
# 모델 생성
model = QStandardItemModel()
# 열 이름 설정
model.setHorizontalHeaderLabels(df.columns)
# 행과 열 수 설정
rows, columns = df.shape
# 데이터 채우기
for row in range(rows):
for col in range(columns):
value = str(df.iat[row, col])
item = QStandardItem(value)
model.setItem(row, col, item)
return model
# 사용 예시
df = pd.DataFrame({
'이름': ['홍길동', '김철수', '이영희'],
'나이': [25, 30, 28],
'직업': ['개발자', '디자이너', '마케터']
})
model = dataframe_to_model(df)
table_view = QTableView()
table_view.setModel(model)
table_view.resizeColumnsToContents()
데이터 필터링과 테이블 업데이트
def filter_and_update_table(df, table_widget, filter_text):
"""텍스트에 따라 DataFrame을 필터링하고 테이블을 업데이트합니다."""
# 모든 열에서 필터 텍스트 검색
filtered_df = df[df.astype(str).apply(lambda row: row.str.contains(filter_text, case=False).any(), axis=1)]
# 테이블 업데이트
display_dataframe(table_widget, filtered_df)
# 사용 예시 (검색창과 연결)
search_input.textChanged.connect(lambda text: filter_and_update_table(df, self.ui.tableWidget, text))
마치며
pandas는 데이터 처리를 위한 강력한 도구로,
PySide와 함께 사용하면 데이터 분석 결과를 시각적으로 표현하는 애플리케이션을 쉽게 개발할 수 있습니다.
이 글에서 배운 내용을 정리하면:
1. DataFrame은 pandas의 핵심 데이터 구조로, 행과 열로 구성된 2차원 테이블입니다.
2. `shape` 속성은 DataFrame의 행과 열의 수를 튜플 형태로 반환합니다.
3. `columns` 속성은 DataFrame의 열 이름을 확인하고 조작할 수 있게 해줍니다.
4. pandas의 다양한 함수를 활용하면 데이터 필터링, 정렬, 그룹화 등 복잡한 작업을 간단하게 수행할 수 있습니다.
5. DataFrame의 데이터를 PyQt/PySide의 테이블 위젯에 표시하는 여러 방법이 있습니다.
pandas와 PyQt/PySide를 함께 활용하면
데이터 처리와 시각화를 결합한 강력한 애플리케이션을 개발할 수 있습니다.
이를 통해 사용자는 데이터를 더 쉽게 이해하고 분석할 수 있게 됩니다.
[ 파이썬 관련 블로그 글 목록 ]
파이썬(Python) 블로그 목록