pandas的索引 index的用途

pandas的索引index的用途

把数据存储于普通的column列也能用于数据查询,那使用index有什么好处?

index的用途总结:

更方便的数据查询;
使用index可以获得性能提升;
自动的数据对齐功能;
更多更强大的数据结构支持;

import pandas as pd

df = pd.read_csv("./pandas/ant-learn-pandas/datas/ml-latest-small/ratings.csv", encoding="utf8",
                 engine="python")

print(df.head(5))

# 查看数量
print(df.count())

# 使用index查询数据
# drop==False,让索引列还保持在column, True代表删除userID这一列
df.set_index("userId", inplace=True, drop=False)
print(df.head())

# 使用colum的condition查询方法
res = df.loc[df["userId"] == 500].head()
print(res)

# 使用index进行查询
res2 = df.loc[500].head()
print(res2)

使用index会提升查询性能

如果index是唯一的,Pandas会使用哈希表优化,查询性能为O(1);
如果index不是唯一的,但是有序,Pandas会使用二分查找算法,查询性能为O(logN);
如果index是完全随机的,那么每次查询都要扫描全表,查询性能为O(N);

完全随机的顺序查询

# 完全随机的顺序查询
# 将数据随机打散
from sklearn.utils import shuffle

df_shuffle = shuffle(df)
print(df_shuffle.head())

判断索引是否是递增的

# 判断索引是否是递增的
res3 = df_shuffle.index.is_monotonic_increasing
print(res3)

# 判断索引是否是唯一的
res4 = df_shuffle.index.is_unique
print(res4)

# 计时,查询id==500数据性能
# 要在ipython下才可以使用。(所以说Jupyter Notebook当然是可以用的,pycharm里的python环境也是jupyter Notebook的)
# %timeit df_shuffle.loc[500]

使用index能自动对齐数据

# 使用index能自动对齐数据
s1 = pd.Series([1,2,3], index=list("abc"))
s2 = pd.Series([2,3,4], index=list("bcd"))
print(s1 + s2)
'''
a    NaN
b    4.0
c    6.0
d    NaN
'''

使用index更多更强大的数据结构支持
很多强大的索引数据结构

CategoricalIndex,基于分类数据的Index,提升性能;
MultiIndex,多维索引,用于groupby多维聚合后结果等;
DatetimeIndex,时间类型索引,强大的日期和时间的方法支持;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值