python - 熊猫索引在性能上比列有优势吗?
问题描述
到目前为止,我曾经将时间戳作为我的时间序列数据帧的索引。我觉得如果我把时间戳作为索引,当我搜索数据时,与使用列中的时间戳进行搜索相比,我可能会获得性能提升。(这是我从名字“索引”的感觉。我觉得它可能会被索引。)但我开始觉得情况可能并非如此。
与列相比,使用索引有什么优势吗?
解决方案
一个答案是数据帧大小。我有一个 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%
推荐阅读
- linux - 如何更正从 Unix Bourne Shell 的目录中打印出复制的文件?
- java - 通过spring jpa hibernate使用查询时无法findById
- date - 在dataweave中减去两个日期时如何计算年龄?
- javascript - Сonflict onBlur 事件与其他元素上的事件
- mongodb - 带有spring boot的AWS DocumentDB失败错误:com.mongodb.client.internal.MongoClientDelegate没有选择服务器
- grails - Grails 高内存使用 Process.waitForProcessOutput
- android - 未安装 Flutter 和 Dart 插件
- macros - 无法在 ClojureScript 上扩展用户定义的宏
- python-3.x - Pytorch 无法构建多尺度内核嵌套模型
- sql - 对 Oracle SQL 中的嵌套表感到困惑