用 pandas 解一道小题。炼到了 DataFrame 实例创建、行列列印、数据运算、条件筛选。
Python 官网:
https://www.python.org/
这里,才 python 前沿。可惜是英文原版。所以,我要练习英文阅读。🧐🧐
- 我的CSDN主页
- My Python 学习个人备忘录
- 我的HOT博
自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
—— 华罗庚
先前写得太凌乱,重新梳理思路(对 pandas.DataFrame 理解理深入一丝了),整理了这篇笔记。
用 pandas 来完成昨天的练习题目。练习到了 DataFrame 实例创建、行列列印、数据运算、条件筛选。可以移步昨天学习打卡帖“2022-03-23 学习打卡”,看看代码截屏图先。
用 pandas 来完解一道小题
- 题目
- DataFrame 实例创建
- 解小题
- 列印学生姓名
- 生成最终成绩
- 学生成绩列印
- 不及格学生
- 完整代码
题目

昨天的练习四个函数的题目,今天用来炼 pandas 的基本操作。🤗🤗
数据准备
# 创建表格的数据。
names = ['张三', '李四', '王五', '赵六']
grades1 = 85, 90, 92, 60 # 可以不加小括号,python 默认元组收集赋值。
grades2 = [78, 98, 32, 89]
DataFrame 实例创建
#表格创建
# 不用 columns 罗列创建表格的字段,默认全部键为字段。
df = pd.DataFrame({'Name': names, 'Grade1': list(grades1), 'Grade2': grades2})
print(f'\n\n创建 DataFrame 数据类型成绩列表:\n\n{df}')
注意:创建表格的参数( pandas.DataFrame() 的第一个参数)只能是列表和字典,生成行列的数据(列表的元素、字典的键值)只能是列表。
输出


1. 列印学生姓名
思路:重置成绩列表序始“1”索引,依次按索引打印姓名列就好。
print(f'\n\n\n{" 1. “1” 始序列印姓名 ":.^37}')
# 思路:重置成绩列表序始“1”索引,依次按索引打印姓名列就好。
df.index = '1.', '2.', '3.', '4.' # 重置成绩列表索引,始“1”序。# 直接用选择列的方式列印姓名列。
print(f"\n\n直接用 DataFrame 选择列的方法列印姓名列:\
\n\n一、df.Name 列印,\n\n{df.Name}\
\n\n二、df['Name'] 列印(此用法的前提是,列名是 python 规范的命名),\
\n\n{df['Name']}\
\n\n三、df.loc[:, ['Name']] 列印,\n{df.loc[:, ['Name']]}\
")
print(f"\n\n{' 用 for 列印更随心 ':-^36}\n\n")
for i in df.index: # 获取姓名列表并遍历打印。print(f'{i:>18}{df["Name"][i]:>6}')
输出

2. 生成最终成绩
匿名函数、列表解析、Series 运算三种方式均可生成最终成绩。
print('\n\n2. 最终成绩:平时成绩(0.3) + 期末成(0.7)\
\n\n{" 三种方式均可生成最终成绩 Grades3 ":-^30}')# 1. 匿名函数 lambda and map() 生成最终成绩。
grades3 = tuple(map(lambda x, y: 0.3 * x + 0.7 * y, grades1, grades2))
# 2. 用 zip() + 列表解析生成最终成绩。
grades4 = [0.3 * x + 0.7 * y for x, y in zip(grades1, grades2)]
# 3. 用 pandas 数据类型 Series 运算生成最终成绩。
grades5 = list(pd.Series(grades1) * 0.3 + pd.Series(grades2) * 0.7)tem = [grades3, grades4, grades5]
for k, i in enumerate(tem):print(f'\n{"Grade":>10}{k + 3} = \
{",".join([str(num) for num in i])}')
# 用“,”拼接最终成绩打印,更耐看。(由于 str.join() 只对字符元素作用,所以列表解析成绩数字为字符串先。)
输出

3. 列印成绩列表
小题思路:前面已经重置成绩列表索引始序“1”,追加最终成绩列,直接打印成绩列表即可。
# 3. 小题思路:前面已经重置成绩列表索引始序“1”,追加最终成绩列,直接打印成绩列表即可。
df['Grade3'] = grades3 # 将最终成绩加入成绩列表。
print(f'\n\n\n{" 3. 成绩列表 ":.^37}\n\n{df}')
输出

4. 不及格的学生
思路:可以先找出不及格记录的索引,再用 for 列印或者 用 loc 列印不及格学生记录。再就是直接用 loc 条件筛选。
# 输出最终成绩不能及格的同学全部信息
print(f'\n\n\n{" 4. 最终成绩不及格的同学 ":.^32}\n')less_index = df[df["Grade3"] < 60].index
print(f"\n\n{' for 遍历小于 60 的索引列印 ':-^33}\n\n")
for i in less_index:print(f"{i:^6}{df['Name'][i]:^6}\
{df['Grade1'][i]:^6}{df['Grade2'][i]:^6}\
{df['Grade3'][i]:^6}")print(f"\n\n{' 直接 loc 列印小于 60 的索引 ':-^33}\
\n\n{df.loc[less_index, :]}")print(f"\n\n{' loc 条件列印 ':-^38}\
\n\n{df.loc[df.Grade3 < 60]}")
输出

完整 Python 代码
(如果从语句注释不能清楚作用,请评论区留言指教和探讨。🤝)
#!/sur/bin/env python
# coding: utf-8'''filename: /sdcard/qpython/tem.py梦幻精灵_cq的炼码场'''print('\n'*3)
print('正在加载依赖库……'.center(31))
import mypythontools as pyt # 自码工具模块加载
import pandas as pd# 创建表格的数据。
names = ['张三', '李四', '王五', '赵六']
grades1 = 85, 90, 92, 60 # 可以不加小括号,python 默认元组收集赋值。
grades2 = [78, 98, 32, 89]#表格创建
# 不用 columns 罗列创建表格的字段,默认全部键为字段。
df = pd.DataFrame({'Name': names, 'Grade1': list(grades1), 'Grade2': grades2})print(f'\n\n创建 DataFrame 数据类型成绩列表:\n\n{df}')print(f"\n\n{' 解 题 ':=^40}")print(f'\n\n\n{" 1. “1” 始序列印姓名 ":.^37}')
# 思路:重置成绩列表序始“1”索引,依次按索引打印姓名列就好。
df.index = '1.', '2.', '3.', '4.' # 重置成绩列表索引,始“1”序。# 直接用选择列的方式列印姓名列。
print(f"\n\n直接用 DataFrame 选择列的方法列印姓名列:\
\n\n一、df.Name 列印,\n\n{df.Name}\
\n\n二、df['Name'] 列印(此用法的前提是,列名是 python 规范的命名),\
\n\n{df['Name']}\
\n\n三、df.loc[:, ['Name']] 列印,\n{df.loc[:, ['Name']]}\
")
print(f"\n\n{' 用 for 列印更随心 ':-^36}\n\n")
for i in df.index: # 获取姓名列表并遍历打印。print(f'{i:>18}{df["Name"][i]:>6}')print('\n\n2. 最终成绩:平时成绩(0.3) + 期末成(0.7)\
\n\n{" 三种方式均可生成最终成绩 Grades3 ":-^30}')# 1. 匿名函数 lambda and map() 生成最终成绩。
grades3 = tuple(map(lambda x, y: 0.3 * x + 0.7 * y, grades1, grades2))
# 2. 用 zip() + 列表解析生成最终成绩。
grades4 = [0.3 * x + 0.7 * y for x, y in zip(grades1, grades2)]
# 3. 用 pandas 数据类型 Series 运算生成最终成绩。
grades5 = list(pd.Series(grades1) * 0.3 + pd.Series(grades2) * 0.7)tem = [grades3, grades4, grades5]
for k, i in enumerate(tem):print(f'\n{"Grade":>10}{k + 3} = \
{",".join([str(num) for num in i])}')
# 用“,”拼接最终成绩打印,更耐看。(由于 str.join() 只对字符元素作用,所以列表解析成绩数字为字符串先。)# 3. 小题思路:前面已经重置成绩列表索引始序“1”,追加最终成绩列,直接打印成绩列表即可。
df['Grade3'] = grades3 # 将最终成绩加入成绩列表。
print(f'\n\n\n{" 3. 成绩列表 ":.^37}\n\n{df}')# 输出最终成绩不能及格的同学全部信息
print(f'\n\n\n{" 4. 最终成绩不及格的同学 ":.^32}\n')less_index = df[df["Grade3"] < 60].index
print(f"\n\n{' for 遍历小于 60 的索引列印 ':-^33}\n\n")
for i in less_index:print(f"{i:^6}{df['Name'][i]:^6}\
{df['Grade1'][i]:^6}{df['Grade2'][i]:^6}\
{df['Grade3'][i]:^6}")print(f"\n\n{' 直接 loc 列印小于 60 的索引 ':-^33}\
\n\n{df.loc[less_index, :]}")print(f"\n\n{' loc 条件列印 ':-^38}\
\n\n{df.loc[df.Grade3 < 60]}")
上一篇: 练习:可迭代的对象和四个函数
下一篇: 练习:银行复利计算
我的HOT博:
- “快乐数”判断(1181阅读)
- 罗马数字转换器(构造元素取模)(1884阅读)
- 罗马数字(转换器|罗生成器)(2473阅读)
- Hot:让QQ群昵称色变的代码(9780阅读)
- 斐波那契数列(递归| for )(2777阅读)
- 柱状图中最大矩形(1619阅读)
- 排序数组元素的重复起止(1211阅读)
- 电话拨号键盘字母组合(1251阅读)
- 密码强度检测器(1699阅读)
- 求列表平衡点(1745阅读)
- 字符串统计(3009阅读)
- Hot:尼姆游戏(聪明版首发)(3277阅读)尼姆游戏(优化版)(854阅读)
推荐条件 点阅破千
Python 入门指南【Python 3.6.3】
好文力荐:
- 【8大编程语言的适用领域】先别着急选语言学编程,先看它们能干嘛
- 靠谱程序员的好习惯
精品文章:
- 好文力荐:《python 完全自学教程》书稿连载
- OPP三大特性:封装中的property
- 通过内置对象理解python'
- 正则表达式
- python中“*”的作用
- Python 完全自学手册
- 海象运算符
- Python中的 `!=`与`is not`不同
- 学习编程的正确方法
来源:老齐教室
CSDN实用技巧博文:
- 8个好用到爆的Python实用技巧
- python忽略警告
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
