Ich arbeite mit großen Datenrahmen mit hoher Speicherauslastung und ich lese, dass, wenn ich den dtype auf wiederholte Werte Spalten ändern kann ich viel Speicher sparen.Pandas DataFrame - Aggregat auf Spalte whos dtype == 'Kategorie' führt zu langsamer Leistung
Ich habe es versucht und in der Tat sank die Speicherauslastung um 25%, aber dann stieß ich auf eine Performance-Langsamkeit, die ich nicht verstehen konnte.
Ich mache Group-by-Aggregation auf die dtype 'Kategorie' Spalten und bevor ich den dtype änderte dauerte es etwa 1 Sekunde und nach der Änderung dauerte es etwa 1 Minute.
Dieser Code zeigt die Leistungsverschlechterung durch den Faktor 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
Was ich versuche, ist, was zu verstehen ist, die Ursache für diese Langsamkeit und ob es einen Weg, sie zu überwinden ist.
Danke!