信息技术会考操作题python,高中信息会考python

本文详细介绍了高中信息技术会考中Python操作题的相关知识点,包括Pandas库中Series和DataFrame的数据结构,数据的读取、删除、添加、修改,以及数据筛选、排序、分组和统计。特别强调了Pandas在处理实际数据时的实用技巧和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家好,小编为大家解答高中信息技术会考python操作题的问题。很多人还不知道信息技术会考操作题python,现在让我们一起来看看吧!

大家好,小编为大家解答高中信息技术会考python操作题解题技巧的问题。很多人还不知道高中信息技术会考python操作题数列,现在让我们一起来看看吧!

前言
Pandas是基于Numpy 的一个工具,是为了解决数据分析任务而创建的python流星雨特效代码简单。它纳入了大量库和一些标准的数据模型,提供了高效操作大型数据集所需的工具,使我们能便捷地处理数据用python绘制满天星的流程图。作为高考信息技术的重点,学好这一模块的相关的知识尤为关键,以下是我高中三年总结的一些常考知识点。
Series

Series是线性的数据结构,带有标签的一维数组,轴标签统称为索引,数据和标签之间存在联系。

用series将以下三个数据存入s1中:105,130,116

import pandas as pd
s1=pd.Series([105,130,116])
print(s1)

我们会得到如下的 结果 

0    105
1    130
2    116
dtype: int64

Series的索引可以通过代码来指定,并且可以使用字符串,将以上三个数据的索引分别指定为:‘语文’,‘数学’,‘英语’通过索引值‘数学’可以访问到数学成绩,也可以通过索引值来修改序列中的值

import pandas as pd
s1=pd.Series([105,130,116],index=['语文','数学','英语'])
print(s1)

结果如下

语文    105
数学    130
英语    116
dtype: int64

Series和列表的主要区别在于列表的元素索引是固定的0,1,2,3··· 而Series除了可以使用数字索引,还可以自定义索引。

表达式s1.indexs1.values分别代表序列的索引,可以使用循环结构遍历到,如下所示:

 另外,除了使用列表来创建Series,还可以使用字典来创建:

import pandas as pd
s1 = pd.Series({"语文":105,"数学":130,"英语":116})
print(s1)
DataFrame

DataFrame对象是一个二维表格,由1个索引列(index)和若干个数据列组成。其中,每列中的元素类型必须一致,而不同的列可以拥有不同的元素类型。

import pandas as pd
data = {'姓名':['小王','小明','小红'],'语文':['105','103','96'],'数学':['130','132','145'],'英语':['106','98','93']}
df1 = pd.DataFrame(data,columns=["姓名","语文","数学",'英语'])
print(df1)

结果如下

   姓名   语文   数学   英语
0  小王  105  130  106
1  小明  103  132   98
2  小红   96  145   93

其中的columns是设定df1中数据列的顺序的参数,输出结果会按照columns后面的顺序输出

读取文件(易错)

接下来我以“超市销售数据.csv”这个文件进行演示

在读取文件前一定要确保存储数据的文件(如.csv文件)要和你编写程序的.py文件在同一目录下

一般我们用pandas读取.csv文件或.xlsx文件时使用read_csv( )read_excel( )

注意!在用pandas的read_csv( )或read_excel( )函数读取含有中文路径的文件时,会出现解码问题,可以用open( )函数打开,如:pd.read_csv(open(中文路径))

读取并打印:

import pandas as pd	                  
df=pd.read_csv(open("超市销售数据.csv"))
print(df)
      收银员名称       单据号            销售时间  ...  销售单价 销售数量  销售金额
0        陈晨  20000001  20141018072043  ...   1.7  1.0   1.7
1        陈晨  20000002  20141018073215  ...   4.4  1.0   NaN
2        陈晨  20000003  20141018073519  ...  86.9  1.0  86.9
3        陈晨  20000004  20141018073544  ...   7.2  1.0   NaN
4        陈晨  20000005  20141018073612  ...   5.6  1.0   5.6
    ...       ...             ...  ...   ...  ...   ...
65530   刘珍霞  20031877  20150228184246  ...   2.9  1.0   2.9
65531   刘珍霞  20031877  20150228184246  ...   4.5  1.0   4.5
65532   刘珍霞  20031877  20150228184246  ...   1.5  2.0   3.0
65533   刘珍霞  20031878  20150228184336  ...  10.9  1.0  10.9
65534   刘珍霞  20031878  20150228184336  ...   1.5  2.0   3.0

[65535 rows x 8 columns]
删除行列

第二行中缺失数据,可以用drop( )函数删除第二

注意第二行的索引是1,所以我们在后面填入1就可以删除了,但是删除后得到的新二维表需要重新赋值给原先存放二维表的变量,有下面两种方法。

方法一

df=df.drop(1)

方法二

df.drop(1,inplace=True)

drop()函数默认是对进行操作,如果需要对操作需要增加参数axis=1

(axis用于指定二维表中的行或列,drop()函数中若不写该参数默认为0指定1则表示指定)

 拓展:dropna()函数   一般情况下只用于删除带有空数据(NaN)

添加行列

insert()函数可以添加一,但要指定参数如:df.insert(添加的位置,列名,值)

例:销售金额一列存在数据缺失(如第2行),可以通过insert()在后方插入新的一列来显示完整且正确的销售金额,并将销售单价和销售数量相乘的结果设为其值。

df.insert(8,"完整销售金额",df["销售单价"]*df["销售数量"])

append()函数可以在最后数据。ignore_index=True表示忽略新数据的索引号

df.append({"收银员名称":"陈晨","单据号":101101111},ignore_index = True)
修改值

经过测试,Python3.7及以上版本set_value()函数已不可用。要根据行索引和列索引(也称列标题、字段名)修改某个值,可以使用“at”,方法如下:

修改第三行收银员名称为小明:

df.at[2,'收银员名称'] = '小明'
      收银员名称       单据号            销售时间  ...  销售单价 销售数量  销售金额
0        陈晨  20000001  20141018072043  ...   1.7  1.0   1.7
1        陈晨  20000002  20141018073215  ...   4.4  1.0   NaN
2        小明  20000003  20141018073519  ...  86.9  1.0  86.9
3        陈晨  20000004  20141018073544  ...   7.2  1.0   NaN
4        陈晨  20000005  20141018073612  ...   5.6  1.0   5.6
    ...       ...             ...  ...   ...  ...   ...
65530   刘珍霞  20031877  20150228184246  ...   2.9  1.0   2.9
65531   刘珍霞  20031877  20150228184246  ...   4.5  1.0   4.5
65532   刘珍霞  20031877  20150228184246  ...   1.5  2.0   3.0
65533   刘珍霞  20031878  20150228184336  ...  10.9  1.0  10.9
65534   刘珍霞  20031878  20150228184336  ...   1.5  2.0   3.0

[65535 rows x 8 columns]

其中,df.at[2,'收银员名称']意为先选取该数据。之后再对其进行赋值。

值得注意的是at后面中

df.rename(columns = {"销售金额":"销售额"})

括号内前面的是索引,后面的是索引

拓展:rename()函数适合于修改个别的行列索引

索引

df.rename(columns = {"销售金额":"销售额"})

索引

df.rename(index = {0:"起始"})
选取数据(重点)

★★★对数据整理或计算时,经常需要对局部数据进行操作,此时选取数据的方法比较重要。

1. 根据列索引(列名、字段名)选取数据

选取一列:df[列名] 或 df.中文列名

选取多列:df[[列名,列名]]

2. 根据行索引选取数据

选取一行: df[n:n+1]   n为索引号   注意!这里选取一行如果写df[n]会报错

选取连续多行:df[m:m+n]  m,n为索引号

根据索引号来选取不连续的多行暂时不涉及,但有时可以根据条件筛选,如下所示:

①选取销售金额小于8.5的所有行:df[df['销售金额']<8.5]

②选取销售金额等于8.5的所有行:df[df['销售金额']==8.5]

3. 选择某行某列的数据

df.at[索引,“索引”]

统计行数

使用count()函数统计数据集当中的非空

import pandas as pd	                  
df = pd.read_csv(open("超市销售数据.csv"))
print(df.count())

 结果如下

收银员名称    65535
单据号      65535
销售时间     65535
商品货号     65535
商品名称     65535
销售单价     65535
销售数量     65535
销售金额     65532
dtype: int64
升序降序(重点)

使用sort_values()可以对数据排序,通过axis=0/1确定/排序(一般情况都会以行为单位调整顺序),通过ascending = 1/0 True/False确定/序。

以销售数量的多少按序对进行排序

df = df.sort_values("销售数量",axis=0,ascending=False)

结果如下:

       收银员名称       单据号            销售时间  ...   销售单价   销售数量   销售金额
64707    刘珍霞  20031520  20150227142158  ...   1.40  300.0  420.0
17127   欧阳莉芳  20008359  20141119185659  ...   1.50   50.0   75.0
42122    刘珍霞  20020491  20150115090634  ...   6.30   48.0  302.4
59018     陈晨  20028923  20150216193252  ...  20.00   40.0  800.0
3197     王金萍  20001529  20141022150902  ...   3.40   33.0  112.2
     ...       ...             ...  ...    ...    ...    ...
7005    欧阳莉芳  20003448  20141029131106  ...   1.15   -4.0   -4.6
37500     陈晨  20018309  20150104145203  ...   1.50   -4.0   -6.0
18507     陈晨  20009055  20141122120328  ...   7.20  -10.0  -72.0
18506     陈晨  20009055  20141122120328  ...   7.40  -10.0  -74.0
60283     陈晨  20029517  20150219133542  ...  11.00  -20.0 -220.0

[65535 rows x 8 columns]

一些排序之后常用的函数

head( )、tail( ):返回前n个、后n个数据记录;如head(3),就返回前3行数据,括号内不写默认为5

max( )、min( ):返回最大值、最小值;

sum( )、mean( ):求和、求平均值,通过 axis = 1/0确定/列  和drop函数中的axis用法相反!

数据分组(难点)

groupby()可以对DataFrame对象各列或各行中的数据进行分组,然后对其中每一组数据进行不同的操作。

例子:按照销售员名称进行分类,然后统计非空

import pandas as pd	
df = pd.read_csv(open("超市销售数据.csv"))
print(df.groupby('收银员名称').count())	

结果如下

         单据号   销售时间   商品货号   商品名称   销售单价   销售数量   销售金额
收银员名称                                                 
 刘珍霞   10044  10044  10044  10044  10044  10044  10044
 朱姣艳     297    297    297    297    297    297    297
 欧阳莉芳  21297  21297  21297  21297  21297  21297  21297
 王金萍    2376   2376   2376   2376   2376   2376   2376
 陈晨    31521  31521  31521  31521  31521  31521  31518

注意!如果只写了print(df.groupby('列索引'))是看不到结果的,我们在写代码测试时一定要在groupby()之后加上某个函数

拓展:使用len()函数还可以求出分组的组数

temp = df.groupby('收银员名称').count()
print(len(temp))

输出结果为:5

在实际操作中分组之后往往会用matplotlib绘制统计图表,而绘制统计图时往往需要先获取图像x轴和y轴的数据,这两个数据一般使用列表的形式,那么如何从统计好的数据中得到这两个数据呢?

假设我们要绘制如下图表来展示不同收银员的销售金额

 我们首先要获取他的x轴也就是每个收银员的名称,按照上面我们讲的访问的方法写出以下代码

x = df.收银员名称
print(x)

这时候输出x的结果会报错AttributeError: 'DataFrame' object has no attribute '收银员名称'

这是因为在groupby()函数中自带一个as_index的参数,这个参数很容易被忽略,如果不写的话,他的值默认为True,他的意思是把第一数据作为整个二维表的索引,仔细观察你就会发现整个第一列被往下移动了一格

 

这就是为什么会报错说找不到“收银员名称”这个索引的原因。

由此可见当groupby后面没有填as_index这个参数或者填了as_index=True时,我们不能用这个方法访问到该数据,而应该使用.index来获取全部的索引

x = df.index
print(x)

成功获取到了!结果如下

Index([' 刘珍霞', ' 朱姣艳', ' 欧阳莉芳', ' 王金萍', ' 陈晨'], dtype='object', name='收银员名称')

同理可得.values可以用来获取每一行存放的值,之后会细讲

那么如果我们一定要用x = df.收银员名称或者x = df["收银员名称"]来获取到相应数据的话,我们应该把代码改为

print(df.groupby('收银员名称',as_index=False).count())

而y轴所需要的数据我们则可以直接用y = df.销售金额来获取到

分完组的数据中往往存在许多没用的数据,我们在处理过程中可能会先对分完组的数据处理,保留我们需要的数据,继续上面的例子

我们在分组后的数据后进一步筛选取得只保留销售数量的的数据

import pandas as pd	
df = pd.read_csv(open("超市销售数据.csv"))
temp = df.groupby('收银员名称').count().销售数量	
print(temp)

这时会输出如下的series数据

收银员名称
 刘珍霞     10044
 朱姣艳       297
 欧阳莉芳    21297
 王金萍      2376
 陈晨      31521
Name: 销售数量, dtype: int64

很显然,因为没有设置参数as_index“收银员名称”这一直接成为了索引

如果设置as_index=False输出结果如下,他是会自动补充数字行索引的

0    10044
1      297
2    21297
3     2376
4    31521
Name: 销售数量, dtype: int64

同时会发现这个数据没有了索引,这时候如果我们要获取图表y轴的数据,也就是每个员工的销售金额,我们应该使用.values来获取

print(temp.values)

我们就成功得到了如下数据

[10044   297 21297  2376 31521]

综上所述,在做类似这样先分组后绘图的题目一定要注意代码中的groupby()函数中的as_index的使用情况以及行列索引的情况从而选择合适的方法取得所需数据!

智慧消防安全与应急管理是现代城市安全管理的重要组成部分,随着城市化进程的加速,传统消防安全管理面临着诸多挑战,如消防安全责任制度落实不到位、消防设施日常管理不足、消防警力不足等。这些问题不仅制约了消防安全管理水平的提升,也给城市的安全运行带来了潜在风险。然而,物联网和智慧城市技术的快速发展为解决这些问题提供了新的思路和方法。智慧消防作为物联网和智慧城市技术结合的创新产物,正在成为社会消防安全管理的新趋势。 智慧消防的核心在于通过技术创新实现消防安全管理的智能化和自动化。其主要应用包括物联网消防安全监管平台、城市消防远程监控系统、智慧消防平台等,这些系统利用先进的技术手段,如GPS、GSM、GIS等,实现了对消防设施的实时监控、智能巡检和精准定位。例如,单兵定位方案通过信标点定位和微惯导加蓝牙辅助定位技术,能够精确掌握消防人员的位置信息,从而提高救援效率和安全性。智慧消防不仅提升了消防设施的管理质量,还优化了社会消防安全管理资源的配置,降低了管理成本。此外,智慧消防的应用还弥补了传统消防安全管理中数据处理方式落后、值班制度执行不彻底等问题,赋予了建筑消防设施智能化、自动化的能力。 尽管智慧消防技术在社会消防安全管理工作中的应用已经展现出巨大的潜力和优势,但目前仍处于实践探索阶段。相关职能部门和研究企业需要加大研究开发力度,进一步完善系统的功能与实效性。智慧消防的发展既面临风险,也充满机遇。当前,社会消防安全管理工作中仍存在制度执行不彻底、消防设施日常维护不到位等问题,而智慧消防理念与技术的应用可以有效弥补这些弊端,提高消防安全管理的自动化与智能化水平。随着智慧城市理念的不断发展和实践,智慧消防将成为推动社会消防安全管理工作与城市化进程同步发展的关键力量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值