아미(아름다운미소)

메모리측정 본문

카테고리 없음

메모리측정

유키공 2025. 6. 11. 12:24
import pandas as pd

def report_memory_usage(df: pd.DataFrame, sort: bool = True, top: int = None) -> pd.DataFrame:
    """
    DataFrame의 열별 실제 메모리 사용량을 GB 단위로 리포팅합니다.
    'Index'는 제외됩니다.

    Args:
        df (pd.DataFrame): 측정할 DataFrame
        sort (bool): 메모리 사용량 기준 정렬 여부 (default: True)
        top (int): 상위 N개 열만 출력 (default: None: 전체)

    Returns:
        pd.DataFrame: 열별 메모리 사용량(GByte), dtype 포함
    """
    usage = df.memory_usage(deep=True) / 1024**3  # GB 단위
    usage = usage.drop('Index')  # 🔧 'Index' 항목 제거

    usage_df = pd.DataFrame({
        'column': usage.index,
        'memory_gb': usage.values,
        'dtype': [df[col].dtype for col in usage.index]
    })

    if sort:
        usage_df = usage_df.sort_values(by='memory_gb', ascending=False)

    if top:
        usage_df = usage_df.head(top)

    usage_df.reset_index(drop=True, inplace=True)
    total = usage_df['memory_gb'].sum()
    print(f"🧠 Total memory usage (columns only): {total:.4f} GB")

    return usage_df
df = pd.DataFrame({
    'id': range(10_000_000),
    'name': ['apple'] * 10_000_000,
    'value': [3.14] * 10_000_000
})

mem_report = report_memory_usage(df)
print(mem_report)
🧠 Total memory usage: 0.5584 GB

     column  memory_gb     dtype
0      name     0.3810    object
1        id     0.0763      int64
2     value     0.0763    float64
def report_memory_usage(df: pd.DataFrame, sort: bool = True, top: int = None, df_name: str = None) -> pd.DataFrame:
    """
    DataFrame의 열별 실제 메모리 사용량을 GB 단위로 리포팅합니다.
    'Index'는 제외됩니다.

    Args:
        df (pd.DataFrame): 측정할 DataFrame
        sort (bool): 메모리 사용량 기준 정렬 여부 (default: True)
        top (int): 상위 N개 열만 출력 (default: None: 전체)
        df_name (str): DataFrame 이름 (default: None)

    Returns:
        pd.DataFrame: 열별 메모리 사용량(GByte), dtype 포함
    """
    usage = df.memory_usage(deep=True) / 1024**3  # GB 단위
    usage = usage.drop('Index')  # 'Index' 항목 제거

    usage_df = pd.DataFrame({
        'column': usage.index,
        'memory_gb': usage.values,
        'dtype': [df[col].dtype for col in usage.index]
    })

    if sort:
        usage_df = usage_df.sort_values(by='memory_gb', ascending=False)

    if top:
        usage_df = usage_df.head(top)

    usage_df.reset_index(drop=True, inplace=True)
    total = usage_df['memory_gb'].sum()

    if df_name:
        print(f"🧠 Total memory usage of '{df_name}' (columns only): {total:.4f} GB")
    else:
        print(f"🧠 Total memory usage (columns only): {total:.4f} GB")

    return usage_df
Comments