8个高效Python数据分析技巧与代码示例
在数据分析和科学计算领域,Python 凭借其丰富的库生态(如 NumPy、Pandas)成为首选语言。掌握核心语法和函数能显著提升开发效率与代码可读性。以下整理了 8 个关键技巧,涵盖列表处理、函数式编程、数组操作及 DataFrame 合并等场景。
本文介绍了 Python 数据分析中的 8 个核心技巧,包括列表推导式、Lambda 表达式、Map 与 Filter 函数、NumPy 的 Arange 与 Linspace、Pandas 的 Axis 概念、DataFrame 合并方法(Concat/Merge/Join)、Apply 函数应用以及数据透视表。内容涵盖语法解析、代码示例及性能优化建议,旨在帮助开发者提升数据处理效率与代码质量。

在数据分析和科学计算领域,Python 凭借其丰富的库生态(如 NumPy、Pandas)成为首选语言。掌握核心语法和函数能显著提升开发效率与代码可读性。以下整理了 8 个关键技巧,涵盖列表处理、函数式编程、数组操作及 DataFrame 合并等场景。
使用列表推导式(List Comprehension)替代传统的 for 循环是 Python 的惯用写法。它不仅代码更简洁,通常在执行效率上也优于显式循环。
传统循环方式:
x = [1, 2, 3, 4]
out = []
for item in x:
out.append(item ** 2)
print(out) # 输出:[1, 4, 9, 16]
列表推导式方式:
x = [1, 2, 3, 4]
out = [item ** 2 for item in x]
print(out) # 输出:[1, 4, 9, 16]
进阶用法支持条件过滤,例如只保留偶数的平方:
out = [item ** 2 for item in x if item % 2 == 0]
print(out) # 输出:[4, 16]
Lambda 表达式用于创建匿名函数,适用于仅需简单逻辑且无需重复定义的场合。其基本语法为 lambda arguments: expression。
基础用法:
double = lambda x: x * 2
print(double(5)) # 输出:10
排序应用:
在 sort 或 sorted 中指定 key 时非常有用:
data = [('Alice', 25), ('Bob', 20)]
sorted_data = sorted(data, key=lambda x: x[1])
print(sorted_data) # 按年龄升序排列
注意:Lambda 只能包含单个表达式,复杂逻辑建议使用标准 def 定义函数。
Map 和 Filter 是函数式编程的核心工具,配合 Lambda 可高效处理序列数据。
Map 函数: 将函数作用于序列的每个元素,返回迭代器。
import numpy as np
seq = [1, 2, 3, 4, 5]
result = list(map(lambda var: var * 2, seq))
print(result) # 输出:[2, 4, 6, 8, 10]
Filter 函数: 根据布尔条件筛选元素。
seq = [1, 2, 3, 4, 5]
result = list(filter(lambda x: x > 2, seq))
print(result) # 输出:[3, 4, 5]
在 Pandas 中,通常直接使用向量化操作代替 Map/Filter 以获得更高性能。
NumPy 提供了生成数值序列的高效方法,常用于绘图坐标轴或采样。
np.arange: 类似 range,但返回 NumPy 数组,支持浮点数步长。
arr = np.arange(3, 7, 2)
print(arr) # 输出:array([3, 5])
# 注意:stop 值不包含在内
np.linspace: 在指定区间内均匀分割固定数量的点,常用于绘图。
arr = np.linspace(2.0, 3.0, num=5)
print(arr) # 输出:array([ 2. , 2.25, 2.5 , 2.75, 3. ])
在 Pandas 和 NumPy 中,axis 参数决定了操作沿哪个维度进行。理解形状(shape)是关键。
Pandas DataFrame shape:
import pandas as pd
df = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
print(df.shape) # 输出:(2, 2) -> (行数,列数)
Axis 规则:
axis=0:沿行方向操作(跨行),结果保留列索引。例如 sum(axis=0) 对每一列求和。axis=1:沿列方向操作(跨列),结果保留行索引。例如 drop('Column A', axis=1) 删除列。示例:
df.drop('Column A', axis=1) # 删除列
# df.drop('Row A', axis=0) # 删除行
处理多个数据集时,需根据业务逻辑选择合并方式,类似于 SQL 操作。
Concat: 垂直或水平堆叠 DataFrame,不改变列结构。
df1 = pd.DataFrame({'A': [1, 2]})
df2 = pd.DataFrame({'A': [3, 4]})
result = pd.concat([df1, df2], ignore_index=True)
Merge: 基于键(Key)合并,支持多表连接。
left = pd.DataFrame({'key': ['K0', 'K1'], 'A': [1, 2]})
right = pd.DataFrame({'key': ['K0', 'K1'], 'B': [3, 4]})
merged = pd.merge(left, right, on='key')
Join: 默认基于索引合并,适合关联主键。
left.join(right, lsuffix='_l', rsuffix='_r')
Apply 允许在 Series 或 DataFrame 上应用任意函数,实现自定义逻辑,但需注意性能开销。
Series 应用:
import numpy as np
df = pd.DataFrame([[4, 9]] * 3, columns=['A', 'B'])
print(df.apply(np.sqrt))
# 输出每列元素的平方根
DataFrame 应用:
# 按列求和
print(df.apply(np.sum, axis=0))
# 按行求和
print(df.apply(np.sum, axis=1))
对于大规模数据,优先使用内置聚合函数(如 sum, mean)而非 apply,以获得最佳性能。
数据透视表是分析多维数据的利器,可将扁平数据转换为汇总视图。
基础透视:
# 按 Manager 和 Rep 分组统计
pd.pivot_table(df, index=["Manager", "Rep"])
筛选属性值:
# 仅显示 Price 列的统计
pd.pivot_table(df, index=["Manager", "Rep"], values=["Price"])
聚合函数:
# 计算平均值
pd.pivot_table(df, values="Price", aggfunc="mean")
以上 8 个技巧涵盖了 Python 数据处理的基础到进阶场景。在实际项目中,建议结合具体需求灵活组合这些方法,并始终关注代码的可读性与执行效率。通过熟练掌握这些工具,可以大幅减少重复代码,提升数据分析工作的质量。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online