本次讲课的内容主要针对一些字符串的处理方法以及numpy库的基本操作进行简单说明
如果遇到感兴趣的部分,可以在本群中讨论~!
答疑结束后需要大家自己上网搜索、查阅书籍、动手敲代码!
分享的初衷就是希望能让大家有兴趣自己多了解~学习能力才是最关键的哦
以下内容希望在电脑前的同学可以跟着蓬蓬一起操作一下,印象可以更深刻
字符串排版
在学习爬虫之后,我们常常为爬取下来的文字信息的格式感到烦恼,所以今天咱们第一部分,就来看看一些字符串的基本操作
打开vscode,任意输入一个字符串变量
然后在这个变量后加上一个小黑点
我们可以看到出现了很多选择项,这些,都是针对字符串可以用的方法,下面还有很多,大家可以用滚轮或者上下键查看~
今天咱们主要介绍一下常用的14个方法~
1、capitalize()
只有句首字母大写
lines= ‘hello world’
print(lines.capitalize())
输出为Hello world
2、title()
首字母大写(每个单词都是)
lines= ‘hello world’
print(lines.title())
输出为 Hello World
3、upper()
全部字母大写
lines= ‘hello world’
print(lines.upper())
输出为 HELLO WORLD
4、lower()
全部字母小写
lines= ‘hEllo woRld’
print(lines.lower())
输出为hello world
5、center()
居中函数
lines=‘abcd’
lines.center(20)
输出为’ abcd ’,即默认空格占位,共20个字符,而字符串居中
lines.center(20,’#’)
输出为’########abcd########’,即可将默认的空格占位变成特定符号,如#
6、count()
计数函数,返回一个数值,即字符串中有多少该字符
lines=’hello world ha ha ha haa’
print(lines.count(‘ha’))
输出结果为 4
也就是说,python本身不能判断你是怎么样去编写一个单词,从字符串中去找,遇到h就判断下一个是不是a,如果是,计数加一,最后一个haa并不是ha这个词,但也会因此被计成有一个ha字符
7、find()
返回第一个该字符出现时的下标,注意!下标从0开始,且空格也计为一个字符。
lines=’hello world ha ha ha haa’
print(lines.find(‘ha’))
输出值为12,‘ha’这个字符的出现从下标为12的地方开始。
print(lines.find(‘haa’))
输出值为21,‘haa’这个字符的首字母h下标为21。
8、istitle()
无参数,判断改字符串是不是一个标题,返回True和False,只有全部单词都首字母大写才会被判断为标题
lines=’Hello world ha ha ha haa’
print(lines.istitle())
输出为 False
9、isupper()和islower()
无参数,判断是否全部大写/小写,使用同istitle()
10、endswith()
判断是否以括号中的内容结束,返回值为True和False
注意!python区分大小写!
lines=’hello world ha ha ha haa’
print(line.endswith(‘Haa’))
输出为 False
lines=’hello world ha ha ha haa’
print(lines.endswith(‘haa’))
输出为True
11、startswith()
判断是否以括号中的内容开头,返回值为True和False ,使用方法与endswith()相同
12、strip()
很实用的一个函数,用于切除字符前后的转义字符、空格等,返回有效内容,在爬虫经常用到,例如:
lines= ‘ afk \n\t’
print(lines.strip())
输出为afk
但如果是字符串内部有空格或者转义字符,是无法切除的
lines=’ af\nk \n\t’
print(lines.strip())
输出为
af
k
13、rstrip()
只去除字符串右边(末尾)的转义字符和空格
14、lstrip()
只去除字符串左边(开头)的转义字符和空格
这14个函数是比较常用的字符串排版函数,但大家可以看到还有很多其他的函数,具体使用的时候可以自己看看文档~
numpy库
首先说明一下python中序列的问题,列表是序列,range()函数也可以生成一个整数序列,而数组是另一种,它与列表不同,只能存储一种类型的数据,没有列表的包容性强。
本部分内容适用于动手能力较强的学员同步进行学习,部分操作仅做说明,需要大家自己去尝试和操作,否则不要继续往下看了哦~
———————————预警————————————
数组一般都封装在numpy中使用。
以下代码均在import numpy as np的基础上进行
(敲黑板划重点!!!)
一、生成数组
1、将列表转换为数组的方法
a_list=list(range(10))
b=np.array(a_list)
print(type(b))
希望大家还能记得生成列表的方法和type()函数的用法,这里不多提,忘了的同学之后自行百度或者回头复习。
上述代码的输出是numpy.ndarray,说明我们生成了一个数组,大家也可以直接打印b看看这个数组是什么样。
2、直接生成数组
(1)生成一维数组(如果不知道维度的概念也推荐自己百度搜索)
np.zeros(10)
这样可以得到一个数组,显示为

有10个带小数点的0组成,这是因为函数默认的数据类型是float,若想得到整数,则写成
np.zeros(10,dtype=int)
这里由于是np.zeros所以生成的数都是零,如果是np.ones也就会对应生成全都是1,以此类推,大家可以自己尝试。
(2)生成多维数组
a=np.zeros((4,4),dtype=int)
这样可以生成一个怎样的数组呢?大家可以自己在本地编辑器中操作一下,记得要先import numpy as np。
可以看到,一个中括号里,还有四个小的中括号,每个小的中括号代表一行,每个小中括号里有四个元素,即四列
同样的a=np.ones((4,4),dtype=int)也可以~
这就生成了一个4X4的数组,有学过线性代数的同学可能会感到一丝熟悉的恐惧(先肯定一下你此时闪过的怀疑)
而此时应该有人说了,总不能我要生成一个小数,还要找这个小数用英文怎么说吧?
想要指定一个数怎么办呢?
可以使用
c=np.full((3,3),3.14)
得到一个3X3的二维数组啦~
二、数组的计算
数组理所当然的可以进行计算,并且和行列式的计算十分相近,之前我们接触的加减乘除取余取整等等等,数组都可以做到~
1、比较
首先我们还是创建一个数组a
然后把数组中的数据进行比较
import numpy as np
a=np.array(range(10))
print(a>3)
如果a是一个整数,那么print(a>3)
会返回一个布尔值
但是这里,一个数组,和一个整数进行比较
结果会如何呢
此时的输出结果仍然是布尔值组成的,也就是数组a中的数据会依次和3进行比较,比3大的数据,会返回一个True,比3小就返回一个False

而我想知道这些数据中,大于3的数有哪些,而不是满屏True和False
再做一次比较即可
而这一次的比较,是数组和数组之间的比较了
也就是a这个数组,和a>3这个数组之间
a[a>3]
用中括号把其中一个数组括起来
也就是根据a>3,对于a的一个运算
[0 1 2 3 4 5 6 7 8 9]
[False False False False True True True True True True]
print(a[a>3])
0,1,2,3的对应位置都是False,所以不会显示,最终结果只显示True位置上的数据
也就是输出[4,5,6,7,8,9]
2、数组的加减法
先生成一个数组
a=np.array(list(range(10)))
1)加法
print(a+10)
也相当于print(np.add(a,10))
结果显示
也就是数组中的每个数据都会加上10后输出,数组a本身是不会变化的~
对于二维数组也是如此
b=np.full((3,3),1.0,dtype=float)
则b应该是
print(b+10)
输出
2)其他运算
对于其他的运算,与加法同理,会对元组中的每个元素都进行操作
| 加法 | a+10 | 相当于np.add(a,10) |
|---|---|---|
| 减法 | a-10 | 相当于np.subtract(a,10) |
| 倒数 | -a | 相当于np.negative(a) |
| 乘法 | a*10 | 相当于np.multiply(a,10) |
| 除法 | a/10 | 相当于np.divide(a,10) |
| 取整 | a//10 | 相当于np.floor_divide(a,10) |
| 幂 | a**10 | 相当于np.power(a,10) |
| 取余(取模) | a%10 | 相当于np.mod(a,10) |
3、三角函数
三角函数sin、cos、tan、cot和反三角函数arcsin、arccos、arctan、arccot都是可以用numpy库计算的~
(不清楚三角函数问题的自行百度哦~中学数学啦~
例如
a=np.array(list(range(10)))
c=np.sin(a)
print(c)
输出为
其实这是一行数据哦~因为太长了所以折成两行显示啦,多维数组也同理
b=np.full((3,3),1.0,dtype=float)
d=np.sin(b)
print(d)
运行结果为
4、统计类型计算
求和——sum()
一维数组求和
a=np.full(10,2.3)
print(a)
print(sum(a))
这里的第一行是我们生成的数组,10和2.3,第二行是加和的结果
但很奇怪,怎么这么多个0之后还有个4??
这里要注意,浮点数的计算会存在一定的精确度问题,所以这是正常的~关于浮点数的问题,大家可以自行查阅哦
多维数组求和
a=np.full((3,3),2.3)
print(a)
得到结果
print(sum(a))
得到结果
也就是说,sum对多维数组的求和,是将每一列进行加和
这里要注意,上面的sum是自带的函数sum()
而np中的sum函数不太一样,要写成np.sum()
维度的问题需要大家自己查阅相关书籍,这里不再赘述,仅做了解
5、求最大值
a=np.array([[1,2],[3,4]])
print(np.max(a,axis=0))
比较每一列的最大值,所以输出为
print(np.max(a,axis=1))
比较每一行的最大值,所以输出为
print(np.max(a))
比较全员最大值,输出为
三、数组拼接
a=np.array([1,2,3])
b=np.array([[0,2,4],[1,3,5]])
a长这样,拼接之后
print(np.concatenate([a,a,a]))
变成了一整行
b长这样
print(np.concatenate([b,b]))
此时默认axis=0,是按列拼接,原来有几列就几列,行数增加
print(np.concatenate([b,b],axis=1))
axis=1时,按行拼接,原来有几行就几行,列数增加
今天的分享就到这里啦~对数据分析感兴趣的同学可以看看numpy相关书籍哦~
