day6-Pandas索引及运算

1.索引对象

1.1 Index索引

1.Series和DataFrame中的索引都是Index对象

df = pd.DataFrame({'month': [1, 4, 7, 10],
                    'year': [2012, 2014, 2013, 2014],
                    'sale':[55, 40, 84, 31]})
se = pd.Series(np.arange(10))
df.index, se.index

运行结果

(RangeIndex(start=0, stop=4, step=1), RangeIndex(start=0, stop=10, step=1))

2.索引对象不可变,保证了数据的安全

df.index[0] = 2

#运算结果:
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[6], line 1
----> 1 df.index[0] = 2

File D:\miniconda3\lib\site-packages\pandas\core\indexes\base.py:5347, in Index.__setitem__(self, key, value)
   5345 @final
   5346 def __setitem__(self, key, value) -> None:
-> 5347     raise TypeError("Index does not support mutable operations")

TypeError: Index does not support mutable operations

1.2 Pandas层级索引

下面创建一个Series, 在输入索引Index时,输入了由两个子list组成的list,第一个子list是外层索引,第二个list是内层索引。

series_obj = pd.Series(
    data=np.random.rand(12),
    index=[['a', 'a', 'a', 'a', 'b', 'b', 'b', 'b', 'c', 'c', 'c', 'c'],
           [0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]])
series_obj

运行结果:

a  0    0.675562
   1    0.290974
   2    0.923371
   3    0.528725
b  0    0.705647
   1    0.963255
   2    0.286361
   3    0.119633
c  0    0.506428
   1    0.857414
   2    0.179158
   3    0.493659
dtype: float64

MultiIndex索引对象

- 打印这个Series的索引类型,显示是MultiIndex
- 直接将索引打印出来,可以看到有lavels,和labels两个信息。levels表示两个层级中分别有那些标签,labels是每个位置分别是什么标签。
# 如果index行索引具有嵌套的格式, 那么索引部分就是 MultiIndex 数据类型
series_obj.index

运行结果

MultiIndex([('a', 0),
            ('a', 1),
            ('a', 2),
            ('a', 3),
            ('b', 0),
            ('b', 1),
            ('b', 2),
            ('b', 3),
            ('c', 0),
            ('c', 1),
            ('c', 2),
            ('c', 3)],
           )
  • 取值
    • 根据索引获取数据。因为现在有两层索引,当通过外层索引获取数据的时候,可以直接利用外层索引的标签来获取。
    • 当要通过内层索引获取数据的时候,在list中传入两个元素,前者是表示要选取的外层索引,后者表示要选取的内层索引。
      1.外层选取:
print(series_obj['c'])

运行结果:

0    0.319075
1    0.306451
2    0.724069
3    0.509286
dtype: float64

2.内层选取:

print(series_obj[:, 2])

运行结果:

a    0.163087
b    0.968324
c    0.724069
dtype: float64

DataFrame层级索引

df = pd.DataFrame(data=[[85, 90], [59, 66], [79, 88], [32, 43], [88, 99],
                        [84, 90]],
                  index=[
                      ['张三', '张三', '李四', '李四', '王五', '王五'],
                      ['语文', '数学', '语文', '数学', '语文', '数学'],
                  ],
                  columns=[['初三', '初三'], ['期中考试', '期末考试']])
df

输出
在这里插入图片描述

2 排序操作

2.1 Series排序

  • 使用series.sort_values(ascending=True)进行排序
df = pd.read_csv('./data/stock_day.csv')# 打开一个csv文件
data = df['price_change'][0:20]# 选取price_change前二十行
data_index = data.sort_values(ascending=False)  #降序排列
data_index
6     0.82
1     0.69
11    0.65
0     0.63
2     0.54
4     0.44
3     0.36
5     0.28
12    0.20
17    0.11
8     0.09
15    0.05
14   -0.11
19   -0.20
9    -0.50
16   -0.73
18   -0.93
10   -0.97
13   -1.30
7    -1.50
Name: price_change, dtype: float64
  • 使用series.sort_index(ascending=True)进行排序
data_index.sort_index(ascending=False)

运行结果:

19   -0.20
18   -0.93
17    0.11
16   -0.73
15    0.05
14   -0.11
13   -1.30
12    0.20
11    0.65
10   -0.97
9    -0.50
8     0.09
7    -1.50
6     0.82
5     0.28
4     0.44
3     0.36
2     0.54
1     0.69
0     0.63
Name: price_change, dtype: float64

2.2 DataFrame 排序

  • 使用df.sort_values(by=, ascending=)
    • 单个键或者多个键进行排序,
    • 参数:
      • by:指定排序参考的键
      • ascending:默认升序
        • ascending=False:降序
        • ascending=True:升序
# 按照开盘价大小进行排序 , 使用ascending指定按照大小排序
print(df.sort_values(by="open", ascending=True).head())

在这里插入图片描述

# 多列排序
# 先按照 open 列排序, 如果有相同的数据部分, 就按照 high 排序
data2 = df.head(10).sort_values(by=['open', 'high'])
data2

运行结果:
在这里插入图片描述

# DataFrame如果要按照索引排序, 只能按照行索引排序
data2.sort_index()

运行结果:
在这里插入图片描述

3. DataFrame运算

3.1 算数运算

比如进行数学运算加上具体的一个数字

  • add(other)

  • sub(other)

import pandas as pd

df = pd.read_csv('stock_day.csv')
print(df.open.add(1))


2018-02-27    24.53
2018-02-26    23.80
2018-02-23    23.88
2018-02-22    23.25
2018-02-14    22.49

3.2 逻辑运算

import pandas as pd

df = pd.read_csv('stock_day.csv')

print(df['open'] > 23)

2018-02-27     True
2018-02-26    False
2018-02-23    False
2018-02-22    False
2018-02-14    False

多个逻辑判断

print(df[(df["open"] > 23) & (df["open"] < 24)].head())

在这里插入图片描述

3.3 统计运算

在这里插入图片描述

df = pd.read_json('./data/students.json')
df.describe()
df['math'].describe()

输出结果

count    1000.000000
mean       64.718000
std        20.404382
min        30.000000
25%        46.750000
50%        65.000000
75%        82.000000
max       100.000000
Name: math, dtype: float64
# count      行数
# mean       平均值
# std        标准差
# min        最小值
# 25%        四分位数
# 50%        中位数
# 75%        四分位数
# max        最大值
# axis 轴
# 运算的默认轴都是 axis=0 , 默认按照列统计
df[['chinese', 'math', 'english']].sum()

运行结果:

chinese    63752
math       64718
english    65817
dtype: int64

累计函数

cumsum计算前1/2/3/…/n个数的和
cummax计算前1/2/3/…/n个数的最大值
cummin计算前1/2/3/…/n个数的最小值
cumprod计算前1/2/3/…/n个数的积
df = pd.read_csv('./data/stock_day.csv')
#cumsum函数是一种非常常用的统计分析函数,用它可以统计的数据的累计和。
#f(1)=x1,f(2)=x1+x2,
#f(n)=x1+x2+……xn
#新定义一个列
df['price_change_cumsum'] = df['price_change'].cumsum()

df[ ['price_change', 'price_change_cumsum']]

在这里插入图片描述

#在使用 matplotlib 绘图, 传递的是一个 Series, 会拿行索引作为X轴, 数据作为Y轴绘制
import matplotlib.pyplot as plt
plt.figure(figsize=(20, 8))
df['price_change_cumsum'].plot()

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值