PYTHON 엑셀

[ 판다스(Pandas) ] Pandas shape와 columns 속성 완벽 가이드: PySide 테이블 위젯 연동 방법

나루하루001 2025. 5. 24. 21:34
반응형



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) 블로그 목록
반응형