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

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

  • 2026-10-11 08:32:25
Python程序设计课程记录(三)
在前面的文章Python程序设计课程记录(一)和Python程序设计课程记录(二)中,主要介绍了Python的单值数据类型(数值和字符串)、众多数据如何存储的Python基本数据结构(列表、元组、集合、字典),以及如何从这些数据结构中提取数据、通过for和if循环操作这些数据等基本知识。这些数据我们可以简单理解为“一维”数据,如图所示。
这4个数据结构依次是列表、元组、字典、集合。其中列表、元组和字典,都有对每个元素值给予唯一标识,列表和元组的标识称为索引(index),是系统默认的从0开始依次递增的整数编号,字典的标识称为键(key),可以自定义键,而集合是没有标识的。从数据结构标识来看,列表、元组和字典,都可以通过唯一的标识(index或键)开提取元素,而集合则不可以,所以我们存储数据的时候,要选择适当的数据结构很重要。由单个标识可以唯一辨识或提取元素值的,我们称为一维数据。现实中,这样的数据结构还是很有缺陷的,比如我们常见的电子表格数据,类似一个二维表,这样的数据在Python中可以存储和操作应用吗?其实答案是确定的,一定可以,而且还很常用。这样的数据我们称为二维数据,下面我们介绍介绍常见的二维数据结构创建及简单操作,包括:数组和数据框。
对于纯数值的二维数据结构,我们一般使用科学计算包(numpy)来创建其数组,示例代码如下。
import numpy as npa1=[1,2,3]a2=[4,5,6]a3=[7,8,9]A=[a1,a2,a3]#A1=[[1,2,3],[4,5,6],[7,8,9]]A2=np.array(A)
通过以上程序示例和图可以看出,我们可以通过前面的基础数据类型(如列表),来构造及创建数组(A2),它是通过导入的科学计算包(numpy)及数组创建函数array()来实现的。import numpy as np为导入numpy包,并简称为np,主要原因是有可能包的名称太长了,不方便使用,可以用简称来代替。np.array()即为调用np包中的数组创建函数array()来构建数组。数组元素如何获取呢?
获取的形式:数据结构变量名称[标识]A--列表,A[i],i--标识(索引/index)A--数组,A[i,j] i--行号,j--列号,共同确定唯一的元素值
比如获取9这个元素,其代码示例为
A[2,2]

对于混合数据形式的二维表,可以采用数据框来存储,通过导入pandas包实现。示例代码如下

D={'姓名':['小明','小李','小江','小记','小红','小涛','小黄','小文'],   '科目':['语文','语文','语文','语文','语文','语文','语文','语文'],   '成绩':[95,85,98,90,88,73,86,75]}import pandas as pdD1=pd.DataFrame(D)

数据框中元素获取:数据框变量名.iloc[行下标,列下标],如果取所有行,行下标用“:”(英文输入格式),同理取所有列,列下标也用“:”(英文输入格式)。

d1_73=D1.iloc[5,2]c2=D1.iloc[:,2]

一维数据,通过单一的标识(索引)可提取元素值,比如列表、元组和字典。二维数据,需要通过行下标和列下标,才能精确定位其元素值,并提取出来。上例中D1这个数据框行下标(索引)为0~7,列标(索引)别列名称覆盖掉了,其实列标(索引)也是从0开始依次编号的,D1数据框中“姓名”列为第0列,“科目”列为第1列,“成绩”列为第2列。比如D1.iloc[5,2]=73。而D1.iloc[:,2]取的是第2列,取出来变为序列,它由索引、值和列标签名组成。

print(c2.name)print(c2.values)print(list(c2.index))
成绩[95 85 98 90 88 73 86 75][0, 1, 2, 3, 4, 5, 6, 7]
可以这样理解,提取数据框的每列出来,他们变成序列,这些序列共用索引,即与数据框的索引(index)相同。序列拼接起来,就变为数据框。数据框其实有三个基本属性:索引、值和列名
print(D1.columns)print(D1.values)print(list(D1.index))
Index(['姓名', '科目', '成绩'], dtype='object')[['小明' '语文' 95] ['小李' '语文' 85] ['小江' '语文' 98] ['小记' '语文' 90] ['小红' '语文' 88] ['小涛' '语文' 73] ['小黄' '语文' 86] ['小文' '语文' 75]][0, 1, 2, 3, 4, 5, 6, 7]
小实践:
"""计算张明、李红、王周,三位客户2018-02月的总消费额数据见:用户消费数据.xlsx"""
import pandas as pdA=pd.read_excel('用户消费数据.xlsx')s1=A.iloc[3,3]+A.iloc[4,3]+A.iloc[5,3]s2=A.iloc[9,3]+A.iloc[10,3]+A.iloc[11,3]s3=A.iloc[15,3]+A.iloc[16,3]+A.iloc[17,3]print(s1,s2,s3)
600 850 910
也可以采用循环来实现,已计算s1为例:
s1=0for i in range(3,6):    s1=s1+A.iloc[i,3]print(s1)
600
大实践:
1.用for循环,计算其总交易量和每笔的平均交易量(交易量为0的也参与计算)2.用for循环和if条件判断语句,计算其总交易量和每笔的平均交易量(交易量为0的不也参与计算)数据表为:“数据表_新.xlsx”,截图为部分数据
import pandas A=pandas.read_excel('数据表_新.xlsx')s=0cont=0for i in range(len(A)):    s=s+A.iloc[i,3]    if A.iloc[i,3]!=0:        cont=cont+1avg_s=s/len(A)avg_c=s/contprint(avg_s,avg_c)
21478.883280757098 22822.813407821228

最新文章

随机文章