小编Lio*_*mir的帖子

Pandas DataFrame - 在列dos =='category'的列上聚合会导致性能下降

我使用具有高内存使用率的大数据帧,我读到如果我在重复值列上更改dtype,我可以节省大量内存.

我尝试了它,确实它将内存使用率降低了25%,但后来我遇到了性能缓慢,我无法理解.

我在dtype'category'列上进行分组聚合,在我更改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'] …
Run Code Online (Sandbox Code Playgroud)

dataframe python-2.7 pandas numpy-dtype pandas-groupby

5
推荐指数
1
解决办法
247
查看次数