当前位置:首页>python>Python程序设计课程记录(四)

Python程序设计课程记录(四)

  • 2026-10-11 08:34:47
Python程序设计课程记录(四)
接着Python程序设计课程记录(三)的内容,对大实践中的问题(以第1个问题为例),介绍更加简洁的计算方法。在介绍方法之前,我们先将数据表读取进来,并详细介绍一下数据框的操作技能。
import pandas as pdA=pd.read_excel('数据表_新.xlsx')
读取数据表,得到数据框变量A,部分数据截图如下:
数据框的操作技能
数据类型:DataFrame(数据框)行索引(index:0~编号)列索引(0,1,2,3)---被列名覆盖了列名:代码、交易日期、交易时间、交易量单个元素值获取:A.iloc[i,j]----i代表行索引,j--列索引多个元素值获取:A.iloc[a,b]----a、b代表整数列表比如a=[1,2,4,5],b=[0,1,3]a中的元素值来自行索引,不能超过其最大值,否则越界b中的元素值来自列索引,不能超过其最大值,否则越界a--对A数据框中的行索引进行定位b--对A数据框中的列索引进行定位如果取遍所有行,用":"代替(英文输入格式)如果取遍所有列,也用“:”代替(英文输入格式)如果行索引是连续的,a=起点索引:终点索引(终点索引+1),类似range(3,10)---取的是[3,10),步长1或者可以直接用range函数对行索引进行控制,列索引也是一样的
文章Python程序设计课程记录(三)大实践的问题1,是采用循环的方式来计算交易量,实际上我们可以直接取交易量这一列,从数据框中提取一列,变为序列,而序列中有很多统计方法可以直接使用,比如求和(sum)、求均值(mean)、求方差(var)、求标准差(std)、求最大值(max)、求最小值(min)等。第3列即为交易量这一列,取第3列出来并求和,即求得总交易量。示例代码如下
c3=A.iloc[:,3]s=c3.sum()print(s)
102132090
求其平均每笔交易量,直接求平均值即可。示例代码如下:
m=c3.mean()print(m)
21478.883280757098
小实践:

今有某个行业企业2013-2017年度的利润数据,请计算行业各个年度的总利润数据。比如2013年的行业总利润=2013年的所有企业利润之和。

先读取数据,观察数据的基本信息
import pandas as pdA=pd.read_excel('data.xlsx')
完整数据截图如下:

以计算2013年的行业总利润为例,按数据框的操作技能,我们要找到数据框A中2013-12-31的所有利润并求和即可。按取多个值的思路,我们先找到2013-12-31的行索引位置,分别为3,15,23,25,28,30,31,40,47,48,可以用一个列表a=[3,15,23,25,28,30,31,40,47,48]来表示,再寻找到列索引,利润总额为第2列,因此其示例程序如下:

a=[3,15,23,25,28,30,31,40,47,48]c2=A.iloc[a,2]

执行结果截图如下:

提取出来的结果用c2来表示,筛选出来的多个数据仍然是序列,用序列中的求和方法计算即可,示例代码如下

s=c2.sum()print(s)
22776999254.899998
如果不想一个个手工去数2013-12-31对应的行索引,我们在前面已经学习过循环和条件语句,可以通过程序来实现。比如,我们可以循环遍历数据框的第1列(年度),当年度字符串等于2013-12-31时,将行索引记录下来即可。那如何记录呢?可以创建一个空列表,当满足条件的时候,通过列表中的append方法,依次将满足条件的行索引添加到列表中即可。示例代码如下:
a=[]for i in range(len(A)):    if A.iloc[i,1]=='2013-12-31':        a.append(i)print(a)
[3, 15, 23, 25, 28, 30, 31, 40, 47, 48]
得到的a值与前面手工数行索引得到的值是一样的。得到a值之后,就可以采用前面一样的计算方法计算了。还有没有更好的方法呢?----答案是肯定的,可以通过条件筛选的方式,获得逻辑数组,用逻辑数组来代替前面的a,也是可以筛选得到满足条件的数据。什么是逻辑数组呢?即只有True或False两种取值元素的数组,称为逻辑数组。示例代码如下:
a=[True,False,False,True]import numpy as npaa=np.array(a)
执行结果如下:
作为一个示例,定义一个列表a,值只取True和False,并通过导入numpy包,用数组创建函数array()转换为数组。
回到我们前面介绍的例子,我们可以取数据框中的第1列出来,其变为序列(c1),我们再从序列中把值取出来,就得到了年度这一列的具体值(c1_values),通过与2013-12-31进行比较,存在两种情况:要么值等于2013-12-31,即为True,要么不等,即为False,并将其结果赋给tf,示例代码如下:
c1=A.iloc[:,1]c1_values=c1.valuestf=c1_values=='2013-12-31'
执行结果为(部分截图):
可以发现,逻辑数组tf与c1对比,等于2013-12-31的为True,否则为False。
数据框的操作技巧拓展如下:
A.iloc[tf,b]---b与前面的说明不变tf--对于行索引来说,只取True对应的行索引注意:tf的长度要与数据框A的长度相同,否则没有办法实现一一对应判断
因此,提取2013-12-31的利润总额,可以有改写如下,示例代码为:
c2=A.iloc[tf,2]
执行结果如下:
可以看到,跟前面的计算结果是一样的,其计算结果也是序列,直接调用其求和方法计算即可,跟前面的计算思路一致。

最新文章

随机文章