메모리 사용량이 큰 큰 데이터 프레임을 사용하여 반복 값 열에서 dtype을 변경하면 많은 양의 메모리를 절약 할 수 있다고 읽었습니다.Pandas DataFrame - dtype == 'category'열이 누적 된 성능 열
나는 그것을 시도했지만 정말로 25 % 메모리 사용량을 떨어 뜨 렸지만 그때 나는 이해할 수없는 성능 느려짐에 부딪쳤다.
dtype 'category'열에 group by aggregation을 수행하고 dtype을 변경하기 전에 약 1 초가 걸렸고 변경 후 약 1 분이 걸렸습니다.
이 코드는 2 배 성능 저하를 보여줍니다
import pandas as pd
import random
animals = ['Dog', 'Cat']
days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday','Saturday']
columns_dict = {'animals': [],
'days': []}
for i in range(1000000):
columns_dict['animals'].append(animals[random.randint(0, len(animals)-1)])
columns_dict['days'].append(days[random.randint(0, len(days)-1)])
# df without 'category' dtype
df = pd.DataFrame(columns_dict)
df.info(memory_usage='deep') # will result in memory usage of 95.5 MB
%timeit -n100 df.groupby('days').agg({'animals': 'first'})
# will result in: 100 loops, best of 3: 54.2 ms per loop
# df with 'category' dtype
df2 = df.copy()
df2['animals'] = df2['animals'].astype('category')
df2.info(memory_usage='deep') # will result in memory usage of 50.7 MB
%timeit -n100 df2.groupby('days').agg({'animals': 'first'})
# will result in: 100 loops, best of 3: 111 ms per loop
내가 이해하려고 노력하는 것은이 속도 저하의 원인이 무엇이며 그것을 극복 할 수있는 방법이 있는지.
감사합니다.