2023(春)Python程序设计作业5:Pandas基础技能及综合应用

软工213-492-楚昀哲 2023-春-学生 2023-06-22 15:13:50

作业要求

  1. [基础要求] 基于Jupyter Notebook 完成以下实验一、实验二、实验三;

  2. [重点要求] 修改以下示例代码,以测试不同知识点。在博客上写出你:

  • 修改的代码、

  • 修改的愿意(意图)

  • 代码运行的结果

  • 你的结论

实验一:Series对象的应用

实验要求:

  • 定义一个Series对象,包含5个整数数据;

  • 访问、修改Series对象中的数据;

  • 打印Series对象;

  • 对Series对象进行计算,如求和、求平均值等。

示例代码:

import pandas as pd
 
 
 
# 定义一个Series对象
 
s = pd.Series([10, 20, 30, 40, 50])
 
 
 
# 访问Series对象中的数据
 
print(s[0]) # 输出第一个元素
 
print(s[2:4]) # 输出第3个到第4个元素
 
 
 
# 修改Series对象中的数据
 
s[1] = 25
 
 
 
# 打印Series对象
 
print(s)
 
 
 
# 对Series对象进行计算
 
print(s.sum()) # 求和
 
print(s.mean()) # 求平均值

  • 修改代码:增加一个字符串类型的数据,将Series对象中的数据类型变为混合类型;

  • 修改意图:测试Pandas中对于混合类型的Series对象的处理能力;

修改后的代码:

import pandas as pd
 
 
#定义一个包含整数和字符串类型的Series对象
 
s = pd.Series([10, 'hello', 30, 'world', 50])
 
 
#访问Series对象中的数据
 
print(s[0]) # 输出第一个元素
 
print(s[1:4]) # 输出第2个到第4个元素
 
 
#修改Series对象中的数据
 
s[1] = 'hi'
 
 
#打印Series对象
 
print(s)
 
 
#对Series对象进行计算
 
 
# 求和(只对数值类型的元素求和,字符串类型会报错)
 
print(s.sum())
 
# 求平均值(只对数值类型的元素求平均值,字符串类型会报错)
 
print(s.mean())

img

我的结论:Pandas能够很好地处理混合类型的Series对象,可以对其进行与数值类型相同的操作。

实验二:DataFrame对象的应用

实验要求:

  • 定义一个DataFrame对象,包含3个列,每列分别为整数、浮点数和字符串类型;

  • 访问、修改DataFrame对象中的数据;

  • 对DataFrame对象进行计算,如求和、求平均值等。

示例代码:

import pandas as pd
 
 
# 定义一个DataFrame对象
 
data = {'int_col': [1, 2, 3, 4, 5], 'float_col': [1.2, 2.3, 3.4, 4.5, 5.6], 'str_col': ['a', 'b', 'c', 'd', 'e']}
 
df = pd.DataFrame(data)
 
 
# 访问DataFrame对象中的数据
 
print(df['int_col'][0]) # 输出第一行第一列的数据
 
print(df.loc[1, 'str_col']) # 输出第二行第二列的数据
 
 
# 修改DataFrame对象中的数据
 
df.loc[2, 'float_col'] = 3.5
 
 
# 对DataFrame对象进行计算
 
print(df.sum()) # 求和
 
print(df.mean()) # 求平均值

  • 修改代码:增加一个新的列,包含布尔类型的数据;

  • 修改意图:测试Pandas中对于布尔类型的数据的处理能力;

修改后的代码:

import pandas as pd
 
 
#定义一个包含整数、浮点数、字符串类型和布尔类型的DataFrame对象
 
data = {'int_col': [1, 2, 3, 4, 5], 'float_col': [1.2, 2.3, 3.4, 4.5, 5.6],'str_col': ['a', 'b', 'c', 'd', 'e'], 'bool_col': [True, False, True, False, True]}
 
 
df = pd.DataFrame(data)
 
 
#访问DataFrame对象中的数据
 
print(df['int_col'][0]) # 输出第一行第一列的数据
 
print(df.loc[1, 'str_col']) # 输出第二行第二列的数据
 
print(df['bool_col'][2:4]) # 输出第三个到第四个元素
 
 
#修改DataFrame对象中的数据
 
df.loc[2, 'float_col'] = 3.5
 
df.loc[3, 'bool_col'] = True
 
 
#对DataFrame对象进行计算
 
print(df.sum()) # 求和
 
print(df.mean()) # 求平均值

img

实验三:综合实例

实验要求:

  • 定义一个包含省会城市、人口、GDP、城市面积的DataFrame对象;

  • 计算各种排名,如人口最多的城市、GDP最高的城市等;

  • 使用Pandas绘图,可视化上述实验结果。

示例代码:

import pandas as pd
 
import matplotlib.pyplot as plt
 
 
# 定义一个包含省会城市、人口、GDP、城市面积的DataFrame对象
 
data = {'city': ['北京', '上海', '广州', '深圳'], 'population': [2171, 2424, 1500, 1303],
 
'gdp': [30320, 32679, 20353, 22458], 'area': [16410, 6340, 7434, 1996]}
 
df = pd.DataFrame(data)
 
 
# 计算各种排名
 
pop_rank = df['population'].rank(ascending=False)
 
gdp_rank = df['gdp'].rank(ascending=False)
 
area_rank = df['area'].rank(ascending=False)
 
 
# 将排名添加到DataFrame对象中
 
df['pop_rank'] = pop_rank
 
df['gdp_rank'] = gdp_rank
 
df['area_rank'] = area_rank
 
 
# 使用Pandas绘图,可视化实验结果
 
df.plot(kind='bar', x='city', y=['population', 'gdp', 'area'], title='China Capital Cities')
 
plt.show()

  • 修改代码:增加一个新的列,包含省份名称信息,以测试Pandas中对于多列数据的处理能力;
  • 修改意图:测试Pandas中对于多列数据的处理能力以及数据透视表的应用;

修改后的代码

import pandas as pd
 
import matplotlib.pyplot as plt
 
 
#定义一个包含省会城市、人口、GDP、城市面积和省份名称的DataFrame对象
 
data = {'province': ['北京市', '上海市', '广东省', '广东省', '广东省', '深圳市'],'city':['北京', '上海', '广州', '深圳', '佛山', '深圳'],'population': [2171, 2424, 1500, 1303, 740, 1303],'gdp': [30320, 32679, 20353, 22458, 8514, 22458],'area': [16410, 6340, 7434, 1996, 3257, 1996]}
 
 
df = pd.DataFrame(data)
 
 
#计算各种排名
 
pop_rank = df['population'].rank(ascending=False)
 
gdp_rank = df['gdp'].rank(ascending=False)
 
area_rank = df['area'].rank(ascending=False)
 
 
#将排名添加到DataFrame对象中
 
df['pop_rank']= pop_rank
 
df['gdp_rank'] = gdp_rank
 
df['area_rank'] = area_rank
 
 
#使用数据透视表,按省份汇总数据
 
pivot_table = pd.pivot_table(df, values=['population', 'gdp', 'area'], index=['province'], aggfunc='sum')
 
 
#使用Pandas绘图,可视化实验结果
 
pivot_table.plot(kind='bar', title='China Capital Cities')
 
 
plt.show()

img

  • 实验结论:我们可以使用pandas库中的Series()函数定义一个Series对象,访问和修改该对象中的数据,打印该对象,以及对该对象进行各种计算。这些功能可以帮助我们更方便地处理和分析数据。
...全文
787 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文深入剖析了ext4文件系统的设计理念与核心技术,揭示其作为“老将”在Linux和Android生态中持久不衰的原因。ext4继承自为机械硬盘优化的ext2/ext3家族,采用块组、位图、inode表等结构保障磁头寻道效率,并通过稀疏超级块、flex_bg等机制优化布局。其核心创新包括引入extents替代传统多级间接指针,大幅提升大文件寻址效率;支持延迟分配以降低碎片率;启用64bit模式突破容量限制。日志系统jbd2提供三种写入模式(journal/ordered/writeback),在安全性与性能间灵活权衡,确保崩溃后快速恢复。此外,ext4配备fallocate、hole punch、e4defrag等现代工具,支持稀疏文件、在线扩容与碎片整理,并通过metadata_csum增强元数据完整性检测。在Android系统中,ext4虽非userdata主文件系统,却广泛用于metadata、misc、persist等“小而关键”的分区,凭借高可靠性与成熟修复工具成为系统稳定性的基石。最后,文章通过f2fs、ext4、EROFS三者在设计初衷、写入方式、压缩能力等方面的七维对照,阐明“没有银弹”的选型心法:不同介质与负载需匹配最适合的文件系统。; 适合人群:具备一定操作系统基础知识的开发者、存储系统工程师、Android系统研发人员及对文件系统原理感兴趣的技术爱好者。; 使用场景及目标:①理解ext4为何能在闪存时代仍被广泛用于关键小分区;②掌握extents、jbd2日志、延迟分配等核心技术原理;③对比f2fs、ext4、EROFS在不同应用场景下的优劣,指导实际选型决策。; 阅读建议:此资源兼具技术深度与历史视角,建议结合姊妹篇①(Android存储架构)与②(f2fs闪存优化)对照阅读,以构建完整的文件系统认知体系。对于关键章节如日志机制与三系统对照表,建议反复研读并结合内核文档与实际命令(如tune2fs、e2fsck)进行实践验证。

162

社区成员

发帖
与我相关
我的任务
社区描述
软件工程老师
python 高校 江苏省·南通市
社区管理员
  • juking@ntu
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧