Pandas系列学习教程——10 pandas索引index用途

系列文章目录

第一章 Pandas 学习入门之pandas数据读取

第二章 Pandas 学习入门之pandas数据结构

第三章 Pandas 学习入门之pandas数据查询

第四章 Pandas 学习入门之pandas新增数据列

第五章 Pandas 学习入门之pandas数据统计函数

第六章 Pandas 学习入门之pandas处理缺失值 

第七章 Pandas 学习入门之pandas数据排序

第八章 Pandas 学习入门之pandas字符串操作

第九章 Pandas 学习入门之pandas重要参数axis

第十章 Pandas 学习入门之pandas索引index用途


随着人工智能的不断发展,数据分析这门技术也越来越重要,很多人都开启了学习数据分析,本文就介绍了pandas学习的基础内容。本章简单介绍了pandas索引index的用途,index可以用来查询数据和自动对齐数据,使用index会大大提升数据查询的性能,总之,index具有强大的数据结构支持。


前言

本章简单介绍了pandas索引index的用途,index可以用来查询数据和自动对齐数据,使用index会大大提升数据查询的性能,总之,index具有强大的数据结构支持。


提示:以下是本篇文章正文内容,下面案例可供参考

一、pandas索引index的用途

index的用途总结:

  1. 更方便的数据查询;
  2. 使用index可以获得性能提升;
  3. 自动的数据对其功能;
  4. 更多更强大的数据支持;

二、引入库 & 数据准备

1.引入库

代码如下(示例):

import pandas as pd

2.数据准备

df = pd.read_csv("./datas/ratings.csv")

df.head()

 userIdmovieIdratingtimestamp
0114964982703
1134964981247
2164964982224
31475964983815
41505964982931
...............
10083161016653441493848402
10083261016824851493850091
10083361016825051494273047
10083461016825251493846352
10083561017087531493846415
df.count()
userId       100836
movieId      100836
rating       100836
timestamp    100836
dtype: int64

 返回的是Series.

三、使用index查询数据

# drop=False,让索引还保持在column
df.set_index("userId",inplace=True,drop=False)

df.head()

 set_index()方法允许将DataFrame中的一个或多个列转换为索引。

 inplace=True参数意味着修改会直接在原DataFrame上进行,不会返回一个新的DataFrame。

 drop=False参数确保在将列设置为索引的同时,该列在DataFrame中仍然作为普通列存在。

df.index
Index([  1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
       ...
       610, 610, 610, 610, 610, 610, 610, 610, 610, 610],
      dtype='int64', name='userId', length=100836)
df

# 保存
df.to_excel("rating_index.xlsx", index=True)
# index=True 表示索引列也保存

# 使用index的查询方法
df.loc[500].head()

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

四、使用index会提升查询性能

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

1.实验1:完全随机的顺序查询 

# 将数据随机打散
from sklearn.utils import shuffle
df_shuffle = shuffle(df)

df_shuffle.head()

代码详解: 

  • 在使用sklearn.utils.shuffle函数将Pandas DataFrame的数据随机打散时,你需要首先确保已经安装了scikit-learn库,因为shuffle函数是从这个库中提供的。
  • 此函数的目的是对数据进行随机重排,这在很多情况下很有用,比如在划分训练集和测试集之前,确保数据的随机性,从而避免因数据排序导致的偏差。
  • shuffle函数默认会重置索引,返回的df_shuffle将具有从0开始的新索引。如果你希望保留原始索引,可以使用shuffle(df, random_state=42).reset_index(drop=True)
  • 你可以通过random_state参数设置一个随机种子,以确保每次打散的顺序相同,这在需要可重复的实验时很有用。
  • 确保在使用shuffle之前,你的数据已经是一个Pandas DataFrame对象。如果你的数据是其他格式(如NumPy数组),那么需要相应地调整。
  • 这种打散数据的方法在准备机器学习数据集时特别有用,可以帮助减少模型训练过程中的过拟合风险,并提高模型的泛化能力。 
# 索引是否是递增的
df_shuffle.index.is_monotonic_increasing
False

DataFrame.index.is_monotonic_increasing属性。此属性会返回一个布尔值(True或False),表明索引是否从小到大单调递增。

如果is_increasing的值为True,说明索引是递增的;如果为False,说明索引不是递增的。通常,在打乱数据后,除非你显式地调用了.reset_index(drop=True)来重置索引,否则索引不会是递增的。这是因为shuffle函数保留了原始数据的索引顺序,即使数据的顺序被打乱了。 

# 检查索引是否是唯一的
df_shuffle.index.is_unique
False

.is_unique属性用于检查DataFrame的索引是否是唯一的,即没有重复的索引值。如果索引是唯一的,它会返回True;如果有任何重复的索引值,它会返回False。 

# 计时,查询id==500数据性能
%timeit df_shuffle.loc[500]
187 µs ± 1.27 µs per loop (mean ± std. dev. of 7 runs, 10,000 loops each)

测量查询id==500(这里假设id是DataFrame的索引)在打散后的DataFrame df_shuffle中的性能,可以使用%timeit。

如果你在查询之前没有将id设置为索引(假设id仅是DataFrame中的一个列),这样的查询会非常慢,因为Pandas需要遍历整个DataFrame来查找符合条件的行。如果性能是一个关注点,为经常查询的列设置索引会是一个好的做法:df_shuffle.set_index('id', inplace=True)

 

 2.实验2:将index排序后的查询

# 按索引升序排序
df_sorted = df_shuffle.sort_index()

df_sorted.head()

 sort_index()方法默认按照升序排列索引。如果你想按照降序排列索引,可以通过设置参数ascending=False来实现。

# 按索引降序排序
df_sorted_desc = df_shuffle.sort_index(ascending=False)

df_sorted_desc.head()
 
# 索引是否是递增的
df_sorted.index.is_monotonic_increasing
True
df_sorted.index.is_unique
False
%timeit df_sorted.loc[500]
51.2 µs ± 4.03 µs per loop (mean ± std. dev. of 7 runs, 10,000 loops each)

五、使用index能自动对齐数据

 包括series和dataframe:

s1 = pd.Series([1,2,3], index=list("abc"))

s1
a    1
b    2
c    3
dtype: int64
s2 = pd.Series([2,3,4], index=list("bcd"))

s2
b    2
c    3
d    4
dtype: int64
s1+s2
a    NaN
b    4.0
c    6.0
d    NaN
dtype: float64

这个结果中包含了所有在s1s2中出现的索引,而且只有当某个索引在两个Series中都存在时,其对应的值才会是非NaN的相加结果。 

六、使用index更多更强大的数据结构支持 

 很多强大的索引数据结构:

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

总结

提示:这里对文章进行总结:

随着人工智能的不断发展,数据分析这门技术也越来越重要,很多人都开启了学习数据分析,本文就介绍了pandas学习的基础内容。本章简单介绍了pandas索引index的用途,index可以用来查询数据和自动对齐数据,使用index会大大提升数据查询的性能,总之,index具有强大的数据结构支持。

  • 29
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值