8 个高效 Python 数据分析技巧
涵盖列表推导式、Lambda 表达式、Map 和 Filter 函数、NumPy 的 Arange 和 Linspace、Pandas 的 Axis 概念、DataFrame 组合方法(Concat、Merge、Join)、Apply 函数以及数据透视表等 8 个核心技巧,旨在通过简洁语法和内置工具提升 Python 数据分析的运行效率与代码可读性。

涵盖列表推导式、Lambda 表达式、Map 和 Filter 函数、NumPy 的 Arange 和 Linspace、Pandas 的 Axis 概念、DataFrame 组合方法(Concat、Merge、Join)、Apply 函数以及数据透视表等 8 个核心技巧,旨在通过简洁语法和内置工具提升 Python 数据分析的运行效率与代码可读性。

本文将介绍 8 个使用 Python 进行数据分析的方法,不仅能够提升运行效率,还能够使代码更加'优美'。
定义某种列表时,写 For 循环过于麻烦,幸运的是,Python 有一种内置的方法可以在一行代码中解决这个问题。下面是使用 For 循环创建列表和用一行代码创建列表的对比。
x = [1, 2, 3, 4]
out = []
for item in x:
out.append(item**2)
print(out)
# [1, 4, 9, 16]
# vs.
x = [1, 2, 3, 4]
out = [item**2 for item in x]
print(out)
# [1, 4, 9, 16]
厌倦了定义用不了几次的函数?Lambda 表达式是你的救星!Lambda 表达式用于在 Python 中创建小型、一次性和匿名函数对象,它能替你创建一个函数。
Lambda 表达式的基本语法是:
lambda arguments: expression
注意!只要有一个 lambda 表达式,就可以完成常规函数可以执行的任何操作。
你可以从下面的例子中,感受 lambda 表达式的强大功能:
double = lambda x: x * 2
print(double(5))
# 10
一旦掌握了 lambda 表达式,学习将它们与 Map 和 Filter 函数配合使用,可以实现更为强大的功能。具体来说,map 通过对列表中每个元素执行某种操作并将其转换为新列表。
在本例中,它遍历每个元素并乘以 2,构成新列表。(注意!list() 函数只是将输出转换为列表类型)
# Map
seq = [1, 2, 3, 4, 5]
result = list(map(lambda var: var*2, seq))
print(result)
# [2, 4, 6, 8, 10]
Filter 函数接受一个列表和一条规则,就像 map 一样,但它通过比较每个元素和布尔过滤规则来返回原始列表的一个子集。
# Filter
seq = [1, 2, 3, 4, 5]
result = list(filter(lambda x: x > 2, seq))
print(result)
# [3, 4, 5]
Arange 返回给定步长的等差列表。它的三个参数 start、stop、step 分别表示起始值,结束值和步长,请注意!stop 点是一个'截止'值,因此它不会包含在数组输出中。
# np.arange(start, stop, step)
np.arange(3, 7, 2)
# array([3, 5])
Linspace 和 Arrange 非常相似,但略有不同。Linspace 以指定数目均匀分割区间,所以给定区间 start 和 end,以及等分分割点数目 num,linspace 将返回一个 NumPy 数组。
这对绘图时数据可视化和声明坐标轴特别有用。
# np.linspace(start, stop, num)
np.linspace(2.0, 3.0, num=5)
# array([ 2.0, 2.25, 2.5, 2.75, 3.0])
在 Pandas 中,删除一列或在 NumPy 矩阵中求和值时,可能会遇到 Axis。我们用删除一列(行)的例子:
df.drop('Column A', axis=1)
df.drop('Row A', axis=0)
如果你想处理列,将 Axis 设置为 1,如果你想要处理行,将其设置为 0。但为什么呢?回想一下 Pandas 中的 shape。
df.shape
# (# of Rows, # of Columns)
从 Pandas DataFrame 中调用 shape 属性返回一个元组,第一个值代表行数,第二个值代表列数。
如果你在 Python 中对其进行索引,则行数下标为 0,列数下标为 1,这很像我们如何声明轴值。
如果您熟悉 SQL,那么这些概念对你来说可能会更容易。无论如何,这些函数本质上就是以特定方式组合 DataFrame 的方式。在哪个时间跟踪哪一个最适合使用可能很困难,所以让我们回顾一下。
Concat 允许用户在表格下面或旁边追加一个或多个 DataFrame(取决于您如何定义轴)。
Merge 将多个 DataFrame 合并指定主键(Key)相同的行。
Join,和 Merge 一样,合并了两个 DataFrame。但它不按某个指定的主键合并,而是根据相同的列名或行名合并。
Apply 是为 Pandas Series 而设计的。如果你不太熟悉 Series,可以将它想成类似 Numpy 的数组。
Apply 将一个函数应用于指定轴上的每一个元素。使用 Apply,可以将 DataFrame 列(是一个 Series)的值进行格式设置和操作,不用循环,非常有用!
df = pd.DataFrame([[4, 9],] * 3, columns=['A', 'B'])
print(df)
# A B
# 0 4 9
# 1 4 9
# 2 4 9
df.apply(np.sqrt)
# A B
# 0 2.0 3.0
# 1 2.0 3.0
# 2 2.0 3.0
df.apply(np.sum, axis=0)
# A 12
# B 27
df.apply(np.sum, axis=1)
# 0 13
# 1 13
# 2 13
如果您熟悉 Microsoft Excel,那么你也许听说过数据透视表。
Pandas 内置的 pivot_table 函数以 DataFrame 的形式创建电子表格样式的数据透视表,它可以帮助我们快速查看某几列的数据。
下面是几个例子:
非常智能地将数据按照'Manager'分了组:
pd.pivot_table(df, index=["Manager", "Rep"])
或者也可以筛选属性值:
pd.pivot_table(df, index=["Manager","Rep"], values=["Price"])
上述技巧涵盖了从基础语法到数据处理的核心场景,掌握它们有助于编写更简洁高效的 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