首页 > 解决方案 > 熊猫索引在性能上比列有优势吗?

问题描述

到目前为止,我曾经将时间戳作为我的时间序列数据帧的索引。我觉得如果我把时间戳作为索引,当我搜索数据时,与使用列中的时间戳进行搜索相比,我可能会获得性能提升。(这是我从名字“索引”的感觉。我觉得它可能会被索引。)但我开始觉得情况可能并非如此。

与列相比,使用索引有什么优势吗?

标签: pythonpandasindexing

解决方案


一个答案是数据帧大小。我有一个 50M 行的数据框

df_Usage.info()

输出

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 49991484 entries, 0 to 49991483
Data columns (total 7 columns):
BILL_ACCOUNT_NBR         int64
MM_ADJ_BILLING_YEARMO    int64
BILLING_USAGE_QTY        float64
BILLING_DAYS_CNT         int64
TARIFF_RATE_TYP          object
READ_FROM                object
READ_TO                  object
dtypes: float64(1), int64(3), object(3)
memory usage: 2.6+ GB

将前两列设置为索引(其中包括时间)

df_Usage['MM_ADJ_BILLING_YEARMO'] = pd.to_datetime(df_Usage['MM_ADJ_BILLING_YEARMO'],  format='%Y%m')
df_Usage.set_index(['BILL_ACCOUNT_NBR','MM_ADJ_BILLING_YEARMO'],inplace = True)
df_Usage.info()
<class 'pandas.core.frame.DataFrame'>
MultiIndex: 49991484 entries, (5659128163, 2020-09-01 00:00:00) to (7150058108, 2020-01-01 00:00:00)
Data columns (total 5 columns):
BILLING_USAGE_QTY    float64
BILLING_DAYS_CNT     int64
TARIFF_RATE_TYP      object
READ_FROM            object
READ_TO              object
dtypes: float64(1), int64(1), object(3)
memory usage: 2.1+ GB

内存减少 20%


推荐阅读