page contents

Python:数据科学不可或缺的6个技能!

在当今数据科学领域,Python 无疑是一把威力强大的瑞士军刀。它所具备的丰富特性,不仅能让代码编写变得高效流畅,更能使数据处理与机器学习任务如虎添翼,让我们轻松应对各种复杂挑战,编写出简洁优雅且易于维护的代码。

attachments-2024-12-WwYMXJxY67525e449c52c.png在当今数据科学领域,Python 无疑是一把威力强大的瑞士军刀。它所具备的丰富特性,不仅能让代码编写变得高效流畅,更能使数据处理与机器学习任务如虎添翼,让我们轻松应对各种复杂挑战,编写出简洁优雅且易于维护的代码。

一、推导式(Comprehensions):数据结构的快捷构建大师

推导式堪称 Python 在数据科学任务中的一大神器,能够以极为简洁且可读性超高的方式创建复杂数据结构。

(一)列表推导式

假设我们需要从 1 到 10 的数字中生成一个平方值列表,使用列表推导式仅需一行代码:

   _list = [x ** 2 for x in range(1, 11)]

 print(_list) 这行代码遍历 range(1, 11) 中的每个数字 x,并将其平方后添加到列表中。

(二)嵌套列表推导式

在处理数据科学中的多维数组时,嵌套列表推导式大显身手。比如,有一个二维矩阵,我们想要将其展平为一维列表:

   matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

 flat_list = [num for row in matrix for num in row]

 print(flat_list)

外层循环遍历矩阵的每一行,内层循环则将每行中的元素逐个取出,最终得到展平后的一维列表。

(三)字典和集合推导式

字典推导式可用于创建特征名称与重要性得分的字典。例如:

  _dict = {var: var ** 2 for var in range(1, 11) if var % 2!= 0}

 print(_dict) 这里,键为 1 到 10 中的奇数,值为对应奇数的平方。

集合推导式创建一个集合,如:

  _set = {x ** 2 for x in range(1, 11)} print(_set) 生成 1 到 10 的数字平方的集合,自动去除重复元素。

(四)生成器推导式

当面对大数据集时,生成器推导式的优势凸显。它并非一次性在内存中创建大型数据结构,而是即时生成值,有效提高性能并减少内存占用。例如:

   _gen = (x ** 2 for x in range(1, 11))

 print(list(g for g in _gen))  

生成器推导式 (x ** 2 for x in range(1, 11)) 逐个生成 1 到 10 的数字平方,通过 list(g for g in _gen) 将生成器中的值转换为列表输出。

二、枚举(enumerate):索引与元素的追踪利器

enumerate 是 Python 的内置函数,在迭代序列(如列表或元组)时,能够同时追踪每个元素的索引。这在数据处理中极为有用,方便我们在操作元素的同时,精准掌握其位置信息。

 for idx, value in enumerate(["a", "b", "c", "d"]):

    if idx % 2 == 0:

        print(value)

在上述代码中,enumerate 函数为列表中的每个元素添加了索引,当索引为偶数时,打印出对应的元素。

三、拉链(zip):多序列并行处理的好帮手

zip 函数允许我们并行迭代多个序列(如列表或元组),轻松实现对多个数据序列的同步操作。

 x = [1, 2, 3, 4]
 y = [5, 6, 7, 8]
 for a, b in zip(x, y):
    print(a, b, a + b, a * b)
这里,zip(x, y) 将列表 x 和 y 对应位置的元素一一配对,在循环中,我们可以同时获取并操作 x 和 y 中的元素,打印出它们的值、和以及积。
四、生成器(Generators):大数据集的内存救星
Python 中的生成器是一种特殊的可迭代对象,它的独特之处在于能够即时生成一系列值,而不是一次性将所有值存储在内存中。这对于处理无法全部装入内存的大数据集来说,简直是完美解决方案,数据可以分块或分批处理,避免内存溢出。
  def fib_gen(n):
    a, b = 0, 1
    for _ in range(n):
        yield a
        a, b = b, a + b

 res = fib_gen(10)
 print(list(r for r in res))  

上述代码定义了一个生成器函数 fib_gen,用于生成前 n 个斐波那契数列。通过 yield 关键字,每次生成一个斐波那契数,而不是一次性生成整个数列,大大节省了内存空间。
五、匿名函数(lambda 函数):即时定义的小能手
lambda 关键字让我们能够创建匿名函数,即在一行代码中定义没有名称的函数。在数据科学的特征工程、数据预处理或模型评估等环节,这种即时定义函数的方式非常便捷。
  numbers = range(10)
 even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
 print(even_numbers) 这里的 lambda x: x % 2 == 0 定义了一个匿名函数,用于判断一个数是否为偶数。在 filter 函数中,它筛选出 numbers 列表中的偶数。
以下是一个结合 Pandas 使用 lambda 函数的示例:
  import pandas as pd
 data = {
    "sales_person": ["Alice", "Bob", "Charlie", "David"],
    "sale_amount": [100, 200, 300, 400],
 }
 df = pd.DataFrame(data)
 threshold = 250
 df["above_threshold"] = df["sale_amount"].apply(
    lambda x: True if x >= threshold else False
 )
 print(df) 在 Pandas 的 apply 方法中,使用 lambda 函数根据销售金额是否大于阈值 threshold,为 df 数据框添加了一个新的列 above_threshold。
六、映射(map)、筛选(filter)、归约(reduce):数据处理的三剑客

映射(map):用于将函数应用于可迭代对象的每个元素。例如:
  numbers = [1, 2, 3, 4, 5, 6]
 # 使用 map 计算每个元素的平方
 squared = map(lambda x: x ** 2, numbers)
 print(list(squared))

map 函数将 lambda x: x ** 2 这个函数应用到 numbers 列表的每个元素上,得到每个元素的平方组成的新列表。
筛选(filter):根据条件从可迭代对象中选择元素。如:
  # 使用 filter 选择偶数
 evens = filter(lambda x: x % 2 == 0, squared)
 print(list(evens)) 在已经计算出平方值的 squared 列表中,通过 filter 函数和 lambda x: x % 2 == 0 筛选出偶数。

归约(reduce):将函数应用于可迭代对象中的一对一对元素,最终生成一个单一结果。例如:
  from functools import reduce
 # 使用 reduce 计算偶数平方的和
 sum_of_squares = reduce(lambda x, y: x + y, evens)
 print("Sum of the squares of even numbers:", sum_of_squares)

reduce 函数对筛选出的偶数平方列表 evens 中的元素两两进行相加操作,最终得到偶数平方的总和。

更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

  • 发表于 2024-12-06 10:15
  • 阅读 ( 55 )
  • 分类:Python开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
小柒
小柒

1658 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1658 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章