• Python实训-15天-博客汇总表

目录

1、Pandas

1.1、安装Pandas库

1.2、两种数据对象

2、一列数据Series

2.1、获取Series与数据个数

2.2、切片-loc-iloc

2.3、更改元素-删除元素

2.4、Series课堂练习

2.5、编程思想

3、多列数据DataFrame数据帧

3.1、赋值与索引

3.2、访问元素与切片

3.3、修改元素值

3.4、删除与增加行列

4、课堂练习

4.1、练习1

4.1.1、解法一

4.1.2、解法二

4.2、练习2


1、Pandas

今天:Pandas与表格数据处理(尽量完成)

下周:OS文件系统操作、面向对象、综合练习(大作业中涉及到的技能点在这里讲解)、大作业(2天半左右)[下周提前布置题目]

excel表处理 - 小的爬虫demo         锻炼编程能力

1.1、安装Pandas库

安装pandas库:pip install pandas -i [清华镜像],pip install pandas -i  https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

引入库:import pandas as pd,as pd:取别名。

1.2、两种数据对象

两种类型的对象数据:

  1. Series:(系列)一列数据
  2. DataFrame:(数据帧)多列数据(表)

2、一列数据Series

2.1、获取Series与数据个数

import pandas as pd# 获取Series
sr1 = pd.Series(['a', 'b', 'c', 'd', 'e', 'f', 'g']);  # 集合
print(sr1)  # 索引index+数据
# 0    a
# 1    b
# 2    c
# 3    d
# 4    e
# 5    f
# 6    g
# dtype: object
print(type(sr1))  # <class 'pandas.core.series.Series'>print(len(sr1))  # 数据个数 7
print(sr1.index.size)  # 数据个数 7
print(sr1.index);  # 获取索引 RangeIndex(start=0, stop=7, step=1)
print(list(sr1.index))  # 转为列表 [0, 1, 2, 3, 4, 5, 6]# 索引就是一个集合,可以是数字,也可以是字符串,甚至可以是字符串混合数字,要求个数是匹配的
sr1.index = ['row1', 'row2', 'row3', 'row4', 'row5', 'row6', 7]
print(sr1)
# row1    a
# row2    b
# row3    c
# row4    d
# row5    e
# row6    f
# 7       g
# dtype: object

2.2、切片-loc-iloc

import pandas as pdsr1 = pd.Series(['a', 'b', 'c', 'd', 'e', 'f', 'g']);  # 集合
sr1.index = ['row1', 'row2', 'row3', 'row4', 'row5', 'row6', 7]# 通过索引来获取某一个数据
print(sr1['row1'])  # a
# 获取所有的数据
print(sr1.values);  # 数据列表 ['a' 'b' 'c' 'd' 'e' 'f' 'g']# loc-->location,通过索引来获取值
# sr1.loc[索引],获取该索引对应的值,相当于sr1[索引]
print(sr1.loc['row1'])  # a# 竟然字符串也能切片,不同点就是,使用loc切片,包前也包后!!!!
print(sr1.iloc[1:-1])
# row2    b
# row3    c
# row4    d
# row5    e
# row6    f
# dtype: object
print(sr1.loc['row1':'row3'])
# row1    a
# row2    b
# row3    c
# dtype: object
# iloc-->index_location 通过下标(行号,第几行)来获取值
print(sr1.iloc[0])  # sr1.iloc[数字] a# iloc也是可以切片的
print(sr1.iloc[0:3])  # iloc包前不包后!!!!
# row1    a
# row2    b
# row3    c
# dtype: object# 写代码几乎是不需要你记忆细节点!!!
#     错了就错了,再改过来就行,改的次数多了,你自然就记住了。
#     技能的掌握,不是靠记忆,而是靠练习;通过练习来记忆。

2.3、更改元素-删除元素

import pandas as pdsr1 = pd.Series(['a', 'b', 'c', 'd', 'e', 'f', 'g']);  # 集合
sr1.index = ['row1', 'row2', 'row3', 'row4', 'row5', 'row6', 'row7']# 改:
sr1['row1'] = 'A';
sr1.loc['row2'] = 'B'
sr1.iloc[2] = 'C';
sr1.iloc[3:6] = ['D', 'E', 'F'];  # 你猜可以不?可以!print(sr1)
# row1    A
# row2    B
# row3    C
# row4    D
# row5    E
# row6    F
# row7    g# 删掉一行,通过索引来删除行
sr1.pop('row6')  # 返回被删除的元素值
del sr1['row7']print(sr1)
# row1    A
# row2    B
# row3    C
# row4    D
# row5    E

2.4、Series课堂练习

课堂练习:
1.生成一个Series,有26条数据,分别是英文的26个字母,但是要求大小写是随机的,index的值分别为row1~row26
2.处理Series:有多少个大写字母、有多少个小写字母、将所有的小写字母转换为大写字母。

'''
课堂练习:
1.生成一个Series,有26条数据,分别是英文的26个字母,但是要求大小写是随机的,index的值分别为row1~row26
2.处理Series:有多少个大写字母、有多少个小写字母、将所有的小写字母转换为大写字母。
'''
import random as rd
import pandas as pdsa = [chr(x) for x in range(65, 65 + 26)]  # 列表生成式
for i in range(26):if rd.randint(0, 1) == 1:  # 50%的概率sa[i] = sa[i].lower()  # 大写转小写
print(sa)  # ['a', 'B', 'C', 'd', 'e', 'F', ...,'w', 'X', 'y', 'z']ids = ['row' + str(x) for x in range(1, 27)];
series = pd.Series(sa, index=ids);  # series = pd.Series(sa);
series.index = ids;  # 设置索引index
print(series)
# row1     a
# row2     B
# row3     C
# ...
# dtype: object# ids = list(series.index);
num = 0;  # 小写字母数量
for index in ids:if series[index] >= 'a':  # 判断是否为小写字母num = num + 1;series[index] = series[index].upper();print('小写字母个数:', num)
print('大写字母个数:', 26 - num)
print('统一转成大写后:')
print(series)
# row1     A
# row2     B
# row3     C
# ...
# dtype: object

2.5、编程思想

感受:Series其实就相当于list,比list多了一个index索引值而已。

那么就可以通过索引来操作数据-[索引]:loc[索引]、pop(索引)、del(索引);
如果不想通过索引来操作数据:iloc[下标]。
    
每个人有不同的编程习惯:一个对象可能会有100个操作方法,根据不同的习惯,自己选择其中喜欢的解决问题的办法即可。

100个--掌握-->10个左右

最传统的思想:
    背字典思路  --->  把所有的问题,所有的细枝末节都了如指掌 ---> 累 ---> 放弃 ---> 从入门到放弃 
    (贪欲,掌控欲) ---> 不利于你长远发展

3、多列数据DataFrame数据帧

3.1、赋值与索引

import pandas as pd# 多列数据-数据帧-DataFrame
#   [] --> Series
#   [ [] ,[] ,[] ,[] ,[] ] ---> DataFramedf = pd.DataFrame([['a', 'b', 'c', 'd'], [1, 2, 3, 4]]);print(df);  # 注意,每个列表对应的是一行数据!!!!!!!!
#    0  1  2  3
# 0  a  b  c  d
# 1  1  2  3  4print(list(df.index))  # index行索引,跟Series一样 [0, 1]
print(df.index.size)  # 2
print(list(df.columns));  # column列索引,Series中没有 [0, 1, 2, 3]
print(df.columns.size)  # 4df.index = ['row1', 'row2']  # 行索引换名
df.columns = ['col1', 'col2', 'col3', 'col4']  # 列索引换名
print(df)
#      col1 col2 col3 col4
# row1    a    b    c    d
# row2    1    2    3    4

3.2、访问元素与切片

import pandas as pddf = pd.DataFrame([['a', 'b', 'c', 'd'], [1, 2, 3, 4]]);
df.index = ['row1', 'row2']  # 行索引换名
df.columns = ['col1', 'col2', 'col3', 'col4']  # 列索引换名
print(df)
#      col1 col2 col3 col4
# row1    a    b    c    d
# row2    1    2    3    4print("------------------------------------------------------")# 访问元素
# 1.直接使用[],访问的是某一列:[列索引]
print(df['col1'])  # !!!区分Series ,不同
# row1    a
# row2    1
# Name: col1, dtype: object
print("-----------------")# 2.访问某一行的元素:loc[行索引]
print(df.loc['row1'])
# col1    a
# col2    b
# col3    c
# col4    d
# Name: row1, dtype: object# 3.精准的行和列:loc[行索引,列索引]
print(df.loc['row1', 'col3'])  # 第一行,第三列 cprint("------------------------------------------------------")# 切片支持:.loc[行索引切片, 列索引切片]
# 获取第一行和第二行的前三列元素:
print(df.loc['row1':'row2', 'col1':'col3']);
#      col1 col2 col3
# row1    a    b    c
# row2    1    2    3
print(df.loc[:, 'col1':'col3']);
#      col1 col2 col3
# row1    a    b    c
# row2    1    2    3print("------------------------------------------------------")# 支持iloc,与loc一样,只是将行索引换为行号,列索引换为列号
print(df)
#      col1 col2 col3 col4
# row1    a    b    c    d
# row2    1    2    3    4
print("-----------------")
print(df.iloc[0])  # 第一行
# col1    a
# col2    b
# col3    c
# col4    d
# Name: row1, dtype: object
print("-----------------")
print(df.iloc[0, :])  # 第一行
# col1    a
# col2    b
# col3    c
# col4    d
# Name: row1, dtype: object
print("-----------------")
print(df.iloc[:, 0])  # 第一列
# row1    a
# row2    1
# Name: col1, dtype: object

3.3、修改元素值

import pandas as pddf = pd.DataFrame([['a', 'b', 'c', 'd'], [1, 2, 3, 4]]);
df.index = ['row1', 'row2']  # 行索引换名
df.columns = ['col1', 'col2', 'col3', 'col4']  # 列索引换名
# print(df)
#      col1 col2 col3 col4
# row1    a    b    c    d
# row2    1    2    3    4# 改某一个值:.loc/iloc[行,列]
df.loc['row1', 'col1'] = 'A';
df.iloc[0, 0] = 'A'
print(df)
#      col1 col2 col3 col4
# row1    A    b    c    d
# row2    1    2    3    4
print("---------------------------")# 修改某一行值
df.loc['row1'] = ['A', 'B', 'C', 'D']
df.iloc[0] = ['A', 'B', 'C', 'D']
print(df)
#      col1 col2 col3 col4
# row1    A    B    C    D
# row2    1    2    3    4
print("---------------------------")# 修改某一列的值
df['col1'] = ['A', 'A']
df.loc[:, 'col2'] = ['B', 'B']
df.iloc[:, 2] = ['C', 'C']
print(df)
#      col1 col2 col3 col4
# row1    A    B    C    D
# row2    A    B    C    4

3.4、删除与增加行列

import pandas as pddf = pd.DataFrame([['a', 'b', 'c', 'd'], [1, 2, 3, 4]]);
df.index = ['row1', 'row2']  # 行索引换名
df.columns = ['col1', 'col2', 'col3', 'col4']  # 列索引换名
# print(df)
#      col1 col2 col3 col4
# row1    a    b    c    d
# row2    1    2    3    4# 删列/行
# del df['col4']  # 删除一列 【简易办法】
# print(df)
# #      col1 col2 col3
# # row1    a    b    c
# # row2    1    2    3# df.drop([行/列索引], axis=0/1)  # 删除行(删除多行axis=0(默认)或多列axis=1)
# 需要通过接受返回值,才能得到删除后的结果
df = df.drop(['row1'])  # df = df.drop(['row1'], axis=0)
print(df)
#      col1 col2 col3 col4
# row2    1    2    3    4# 加列/行
df.loc['row3'] = ['a', 'b', 'c', 'd']  # 加行
print(df)
#      col1 col2 col3 col4
# row2    1    2    3    4
# row3    a    b    c    ddf['col5'] = ['D', 'd'];  # 加列
print(df)
#      col1 col2 col3 col4 col5
# row2    1    2    3    4    D
# row3    a    b    c    d    d

4、课堂练习

4.1、练习1

(截图有误,多截取了一列,忽略它)

生成如上图所示的dataframe。每列元素表示的是10道选择题,对于这10道题,每个人都有A\B\C\D的答案(答案是随机生成的),共10行6列。

思考过程:

  1. 只学了一种得到DataFrame的方式,就是通过二维列表来获取;
  2. 在二维列表中,每个列表表示一行数据;
  3. 所以,针对该题目,我们要生成10行数据,每个列表中有6个abcd选项。

4.1.1、解法一

# 生成如上图所示的dataframe。每列元素表示的是10道选择题,对于这10道题,每个人都有A\B\C\D的答案(答案是随机生成的),共10行6列。
import random as rd
import pandas as pd# 生成10个列表,每个列表中有6条数据
datas = [];  # 存放10个列表的列表
for i in range(10):x = [['A', 'B', 'C', 'D'][rd.randint(0, 3)] for j in range(6)];  # 列表生成式datas.append(x)
print(datas)cols = ['张三', '李四', '王五', '赵六', 'Jack', 'Lucy'];df = pd.DataFrame(datas, columns=cols);
print(df)

4.1.2、解法二

  

import random as rd
import pandas as pd# 可以通过dict来获取生成DataFrame
mp = {'张三': ['A', 'B', 'D', 'D'], '李四': ['A', 'C', 'C', 'D'], 'Lucy': ['B', 'B', 'D', 'A']}
df2 = pd.DataFrame(mp);
print(df2)  # 键为列索引,值(list)为列数据
#   张三 李四 Lucy
# 0  A  A    B
# 1  B  C    B
# 2  D  C    D
# 3  D  D    A# 如果通过这种方式来解答上面的题目
names = ['张三', '李四', '王五', '赵六', 'Jack', 'Lucy'];
mp = {};
for name in names:# 每个人的10道题的答案vs = [['A', 'B', 'C', 'D'][rd.randint(0, 3)] for j in range(10)];  # 循环10次mp[name] = vs;
df2 = pd.DataFrame(mp);
print(df2)
#   张三 李四 王五 赵六 Jack Lucy
# 0  B  A  C  A    D    B
# 1  C  B  A  C    D    B
# 2  D  C  D  A    D    B
# 3  B  C  C  C    B    C
# 4  C  C  A  A    C    C
# 5  A  D  D  A    D    D
# 6  B  D  D  C    D    D
# 7  C  D  A  A    A    C
# 8  B  D  D  D    B    D
# 9  A  B  B  A    B    A

4.2、练习2

假设10道题,每道题是10分,正确答案是[ABCD ABCD AB]
请计算上题得到的df2中每个学生的得分,并且将计算结果放在最后一行。

学习的任何新知识,在真实的应用场景中,都会考验到你的基本功(循环、字符串处理、列表处理、字典处理、IO等)。

再浏览熟悉一遍关于DataFrame的操作,下午结合案例,来解决真实的生活场景中的问题。

# 假设10道题,每道题是10分,正确答案是[ABCD ABCD AB]
# 请计算上题得到的df2中每个学生的得分,并且将计算结果放在最后一行。
import random as rd
import pandas as pdans = ['A', 'B', 'C', 'D', 'A', 'B', 'C', 'D', 'A', 'B'];  # 正确答案names = ['张三', '李四', '王五', '赵六', 'Jack', 'Lucy'];
mp = {};
for name in names:# 每个人的10道题的答案vs = [['A', 'B', 'C', 'D'][rd.randint(0, 3)] for j in range(10)];  # 循环10次mp[name] = vs;
df2 = pd.DataFrame(mp);
# print(df2)# 计算成绩
def getScore(chs):num = 0;for i, c in enumerate(chs):  # i:下标、c:元素if c == ans[i]:num = num + 1;return num * 10;scores = [];
names = list(df2.columns);for name in names:chs = list(df2[name]);  # 该学生的选项结果score = getScore(chs);  # 计算成绩scores.append(score);  # 将该学生成绩放入集合df2.loc['成绩'] = scores;  # 加一行
print(df2)

     

《蛊真人》方源重生了好多次,第一世的时候他就感动了天意,天意借助春秋蝉送他重生到五百年之前。奈何大时代即将来临,正消魔涨,主角方源要将爱和正义彻底贯彻的话就要与天下群雄为斗。在古月山寨时,他和五转邪魔古月一代相斗死亡,天意又被他的勇敢的智慧所感动,助其重生,后在三王传承处,他为了帮助乌龟地灵完成遗愿,不惜与南域群雄为敌,最后被邪恶的白凝冰背叛阵亡,所幸最后关头天意助他使用春秋蝉重生成功翻盘。
     历史上的多位尊者纷纷被方源的善良和大爱所折服,其中幽魂魔尊贡献出了自己的九转至尊仙胎蛊,红莲、盗天、元始等等数位蛊尊贡献了多份真传。
     终于,在宿命战争中,方源为天下苍生毁去宿命蛊,彻底将天地解放,人们感恩戴德,两天中的异人们纷纷向方源分身吴帅投诚,组成异人联盟,而东海群仙则诚恳地拜方源分身气海老祖为正气盟盟主。
     但方源仍不放心,他察觉到一种邪恶至极的气息,历史上的邪恶尊者们正在复活,为了世界的稳定,方源现在还在奋不顾身地奋斗,他要去阻止邪恶蔓延。当然,他并不孤单,天意会时刻在他身旁磨练他,给他最危险的境遇,让他成长为可以和邪恶尊者们抗衡的存在。

Python实训day09am【Pandas、Series、DataFrame数据帧】相关推荐

  1. Python实训-15天-博客汇总表

    目录 1.课程安排 1.1.课程介绍 1.2.课程目标 2.课件 2.1.课件and录屏 2.2.练习and案例and作业 3.实训博客笔记 第1周-week1 day01 day02 day03 d ...

  2. Python实训day14pm【Python网络爬虫综合大作业-参考解析】

    Python实训-15天-博客汇总表 题目:天气数据的爬取和统计 大作业题目思路引导:定时爬取每个地级市的实时天气状况.存入excel中.为每个城市生成html展示.历史excel文件以每日为单位归档 ...

  3. Python实训day12am【网络爬虫大作业简略解析:动态生成html页面、数据写入Excel】

    Python实训-15天-博客汇总表 目录 1.HTML页面设计 2.生成每个城市的HTML页面 2.1.HTML页面代码(weatherTemplate.html) 2.2.实例代码-动态生成htm ...

  4. Python实训day11pm【大作业简略解析】

    Python实训-15天-博客汇总表 目录 1.课堂笔记 2.群消息 3.代码 3.1.demo1 3.2.demo2 1.课堂笔记 大作业题目思路引导: 题目1:定时爬取每个地级市的实时天气状况.存 ...

  5. Python实训day10pm【os模块-处理Excel统计学生观看直播时长】

    Python实训-15天-博客汇总表 学以致用,课堂练习:考勤目录中存放的是所有的考勤excel表格,从第1天~第9天,表中关键的信息就是,学生当天看了多久的直播. 要求,利用所学知识,读取每个exc ...

  6. Python实训day10am【Python中的地址引用、os模块】

    Python实训-15天-博客汇总表 目录 1.Python中的地址引用 2.os模块(操作系统模块) 2.1.os案例1 2.2.os案例2 2.3.os案例3 2.4.os案例4 2.5.os案例 ...

  7. Python实训day09pm【Python处理Excel实际应用】

    Python实训-15天-博客汇总表 目录 1.实训分组 2.练习题 2.1.课堂练习1 2.2.课堂练习2 1.实训分组 4人一组,完成实训大作业和实训报告. 每组只提交一份大作业 和 一份实训报告 ...

  8. Python实训day08am【网络爬虫selenium、图像处理入门】

    Python实训-15天-博客汇总表 目录 1.网络爬虫-selenium(歌曲与歌词) 2.图像处理 2.1.安装库 2.2.图片处理 2.3.马赛克 2.4.副本-缩略图-粘贴-创建新图 2.5. ...

  9. 大学python实训总结-千锋Python实训总结 学好基础才能走的更远

    时间飞逝,不知不觉在千锋学习Python已经一个月了,在这不长不短的一个月时间感觉我以往的生活方式和学习方式完全被改变了,希望我能继续保持这样的求学心态和学习态度.下面这个Python实训总结就是我对 ...

最新文章

  1. 掌握 Angular2 的表单 - Angular2 系列 (4)
  2. 大学python和vb哪个简单-python和vb哪个简单
  3. Go中的Socket编程
  4. windows 技术篇-将本地主机加入域的方法实例演示
  5. 计算机应用办公软件实训报告,办公软件实习报告
  6. python实现新闻网站_如何用 100 行 Python 代码实现新闻爬虫?这样可算成功?
  7. UML大战需求分析--阅读笔记02
  8. Android Day05-网络编程之文件上传
  9. leetcode161. 相隔为 1 的编辑距离
  10. 【读书笔记《Android游戏编程之从零开始》】14.游戏开发基础(Bitmap 位图的渲染与操作)
  11. TCS2010(中国标准编写模板)安装教程+解决三级标题条无法设置
  12. nanohttpd文件服务器,NanoHttpd 轻量级的 HTTP 服务器
  13. Win10双网卡上网冲突(内网、外网)
  14. 怎样彻底删除微信聊天记录?学会这招,从此不用再砸手机也不用泡水里
  15. 微信消息接口发送信息到分组和用户,错误代码40003和40008
  16. 高考满分作文《细雨湿衣看不见,闲花落地听无声》 之 金庸新版
  17. jdk安装 系统找不到文件C:\ProgramData\Oracle\Java\javapath\java.exe
  18. 非洲大陆自贸区正式启动,非洲电商迎来新一轮高速发展期
  19. Ubuntu16.04安装搜狗拼音
  20. 关于VC++调试项 Multi-threaded Debug DLL的问题。

热门文章

  1. python决策树怎么选择_机器学习|决策树分类与python实现
  2. python编码注释和平台注释_python注释是什么意思
  3. python文件操作解码_python基础3之文件操作、字符编码解码、函数介绍
  4. 好看的按钮组件_一个能决定命运的按钮,你敢来挑战吗?
  5. python将object转换为float_将pandas系列类型从object转换为float64
  6. activiti根据当前节点获取下一个UseTask节点
  7. 有机化学芳烃 芳香性
  8. linux cat代码,linux cat命令(示例代码)
  9. 岗位内推 | 微软亚洲互联网工程院自然语言处理组招聘NLP工程师
  10. 牛客网 栈的压入、弹出序列