python 데이터 분석의 DataFrame 메모리 최적화
🎒먼저 상황 을 설명 하 겠 습 니 다.pandas 는 수백 메 가 의 dataframe 을 처리 하 는 데 문제 가 없습니다.그러나 우 리 는 몇 개의 G 심지어 더 큰 데 이 터 를 처리 할 때 특히 메모 리 를 차지 하고 메모리 가 작은 사용자 에 게 특히 좋 지 않 기 때문에 데 이 터 를 압축 하 는 것 이 필요 합 니 다.
1.pandas 데이터 점용 크기 보기
이렇게 자신의 메모리 크기 를 확인 하 는 것 을 보 여 드 리 겠 습 니 다(user로그 는 dataframe 의 이름)
# 1 dataframe
user_log.info()
# 2 memory_usage() getsizeof(user_log)
import time
import sys
print('all_data : {:.2f} GB'.format(user_log.memory_usage().sum()/ (1024**3)))
print('all_data : {:.2f} GB'.format(sys.getsizeof(user_log)/(1024**3)))
여기에 dataframe 파일 이 있 는데 user 라 고 합 니 다.log,원본 크기 가 1.91G 이 고 pandas 가 읽 어 내 며 메모리 가 2.9G 를 사 용 했 습 니 다.원본 데이터 크기:1.91G
pandas 읽 기 후 메모리 소모:2.9G
2.데이터 압축
압축 수치의 이 코드 는 천지 대회 의 한 종목 에서 본 것 으로 자 료 를 찾 아 본 결과 모두 압축 메모리 가 기본 적 으로 고정된 함수 형식 이라는 것 을 발견 했다.
def reduce_mem_usage(df):
starttime = time.time()
numerics = ['int16', 'int32', 'int64', 'float16', 'float32', 'float64']
start_mem = df.memory_usage().sum() / 1024**2
for col in df.columns:
col_type = df[col].dtypes
if col_type in numerics:
c_min = df[col].min()
c_max = df[col].max()
if pd.isnull(c_min) or pd.isnull(c_max):
continue
if str(col_type)[:3] == 'int':
if c_min > np.iinfo(np.int8).min and c_max < np.iinfo(np.int8).max:
df[col] = df[col].astype(np.int8)
elif c_min > np.iinfo(np.int16).min and c_max < np.iinfo(np.int16).max:
df[col] = df[col].astype(np.int16)
elif c_min > np.iinfo(np.int32).min and c_max < np.iinfo(np.int32).max:
df[col] = df[col].astype(np.int32)
elif c_min > np.iinfo(np.int64).min and c_max < np.iinfo(np.int64).max:
df[col] = df[col].astype(np.int64)
else:
if c_min > np.finfo(np.float16).min and c_max < np.finfo(np.float16).max:
df[col] = df[col].astype(np.float16)
elif c_min > np.finfo(np.float32).min and c_max < np.finfo(np.float32).max:
df[col] = df[col].astype(np.float32)
else:
df[col] = df[col].astype(np.float64)
end_mem = df.memory_usage().sum() / 1024**2
print('-- Mem. usage decreased to {:5.2f} Mb ({:.1f}% reduction),time spend:{:2.2f} min'.format(end_mem,
100*(start_mem-end_mem)/start_mem,
(time.time()-starttime)/60))
return df
압축 방식 으로 데 이 터 를 user 가 져 오기log 2 중
# csv csv
user_log2=reduce_mem_usage(pd.read_csv(r'/Users/liucong/MainFiles/ML/tianchi/tianmiao/user_log_format1.csv'))
읽 기 성공:내 훈 크기 가 890.48m 로 69.6%감소 하여 효과 가 현저 합 니 다.압축 된 데이터 세트 정보 보기:형식 이 바 뀌 었 고 수량 이 줄 어 들 었 습 니 다.
3.참고 자료
《천지 대 회》.
《카 글 대 회》.
링크:pandas 처리 datafarme 메모리 절약.
python 데이터 분석 에 관 한 DataFrame 메모리 최적화 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 python DataFrame 메모리 최적화 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 지원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.