카테고리 없음
메모리측정
유키공
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