4.1 初见数据处理

Cooking time: 20 mins active / 30 mins passive

Tasks For Instructors: 讲师讲解和演示该节内容,若相关内容认为需要教练辅助,请讲师灵活应变。

我们收集的数据,往往不符合我们需要的格式,带有不同的噪音,看不出本质…… 需要对数据进行转换加工才能获得有用的信息。

爬虫获取的是原料,要经过数据处理的加工,最后才能获得产品。

Python 字符串

很多人会说最重要的数据结构是数组,但最常用的数据结构却是字符串。数据处理中使用最多的操作也是字符串操作。

按分隔符拆分字符串(split)

"a b c d".split(" ") # ["a", "b", "c", "d"]

用分隔符合并字符串(join)

" ".join(["a", "b", "c", "d"]) # "a b c d"

取子字符串

"this is good"[5:]

找到子字符串的位置

"foo bar baz".index('bar')
"foo".index("bar") # ValueError

子字符串判断:

"sub" in "string with sub"
str.startswith("prefix")
str.endswith("suffix")

类型转换

前面 Python 基础提到,数据有不同的类型,有时它的类型不是我们想要的。

例如从网页中提取出来的内容是字符串:

a = "1234"
b = "3.4"
c = "-12"

而我们想把它表示的数值加起来。这样做是不行的:

a + b + c # "12343.4-12"

注意对字符串做的 + 运算只是把它们串连起来。

为了进行数值计算,需要先把它们转换成数值类型。试试下面的代码:

int("123")
float("3.4")

转换成数值类型后,就能进行数值计算了:

a = "1234"
b = "3.4"
c = "-12"
int(a) + float(b) + float(c) # 1225.4

容器类型的处理

listdictset 等数据类型的处理。

处理一:排序

li.sort()                   # 纯粹的排序
li.sort(key=lambda x: x[2]) # 按照第二列排序

上面的排序使用了 lambda 函数。lambda 语法定义了一个匿名的函数,写法为

lambda 参数1, 参数2, ...: 表达式

表达式的值会作为函数的返回值。

处理二:过滤 - 去掉不需要的数据

result = []
for e in li:
    if ...
        result.append(e)

处理三:重塑 - 通过循环生成新的集合数据

result = []
for key, value in dict.items():
    result.append(value)

数据统计

假设我们有一个 list,赋予了变量 lst,里面包含若干项数据,我们要计算它的

最大值:

max(lst)

最小值

min(lst)

sum = 0
for n in lst:
  sum += n

平均值

float(sum) / len(lst)

注:如果 sum 是整数相加得来,那它还是个整数对象(int),为了除法可以得到小数结果,需要先转换成浮点数。

Last updated