Python数据分析利器:Pandas库详解
Pandas是Python中最受欢迎的数据分析库,被数据分析师、数据科学家和机器学习工程师广泛采用。
它与NumPy一起,是任何从事数据和人工智能领域工作的人员必须掌握的库和工具之一。
本文将深入探讨Pandas,并阐述其在数据生态系统中如此受欢迎的原因。
什么是Pandas?
Pandas是一个专门用于Python数据分析的工具库。它使得在Python代码中处理和操作数据变得高效便捷。借助Pandas,你可以轻松地读取、操作、可视化、分析和存储数据。
“Pandas”这个名称源于”Panel Data”一词,这是一个计量经济学术语,指的是对多个个体随时间推移的观测数据。Pandas最初由Wes Kinney于2008年1月发布,之后逐渐发展成为其应用领域中最受欢迎的库之一。
Pandas的核心是两个基本的数据结构:DataFrames和Series,你应当熟知它们。当在Pandas中创建或加载数据集时,它会以这两种数据结构之一呈现。
下一节,我们将探讨这两种数据结构是什么,它们之间的区别以及在什么情况下使用它们最合适。
关键数据结构
正如前面提到的,Pandas中的所有数据都使用两种数据结构之一来表示:DataFrame或Series。下面将详细解释这两种数据结构。
DataFrame(数据框)
以下示例DataFrame是通过本节末尾的代码片段生成的。
在Pandas中,DataFrame是一个二维的数据结构,包含列和行。它类似于电子表格应用中的工作表或关系数据库中的表格。
DataFrame由多个列组成,每一列代表数据集中一个属性或特征。这些列又由单个的值组成。这个值的列表或序列用Series对象来表示。我们将在本文的后面部分更详细地讨论Series数据结构。
DataFrame中的列可以具有描述性名称,以便彼此区分。这些名称在创建或加载DataFrame时分配,但可以随时轻松地重新命名。
列中的值必须是相同的数据类型,尽管不同的列不必存储相同类型的数据。例如,数据集中的“姓名”列将专门存储字符串。但是,同一数据集可以有其他列,如“年龄”,则存储整数。
DataFrame还具有用于引用行的索引。跨不同列但具有相同索引的值构成一行。默认情况下,索引是数字化的,但可以重新分配以适应数据集。在示例中(上图,编码如下),我们将索引列设置为“月份”列。
import pandas as pd sales_df = pd.DataFrame({ 'Month': ['January', 'February', 'March'], 'Jane Doe': [5000, 6000, 5500], 'John Doe': [4500, 6700, 6000] }) sales_df.set_index(['Month'], inplace=True) print(sales_df)
Series(序列)
以上示例Series是通过本节末尾的代码生成的。
如前所述,Series用于表示Pandas中的一列数据。因此,Series是一种一维数据结构。这与二维的DataFrame形成对比。
虽然Series通常用作DataFrame中的一列,但它也可以单独表示一个完整的数据集,前提是该数据集只有一个属性被记录在一个列中。或者更确切地说,数据集只是一个值列表。
因为Series只是一列,所以它不需要有名称。但是,Series中的值已经被索引。与DataFrame的索引一样,Series的索引可以从默认编号进行修改。
在示例中(上图,编码如下),索引已使用Pandas Series对象的`set_axis`方法设置为不同的月份。
import pandas as pd total_sales = pd.Series([9500, 12700, 11500]) months = ['January', 'February', 'March'] total_sales = total_sales.set_axis(months) print(total_sales)
Pandas的特性
现在你已经很好地了解了Pandas是什么以及它所使用的关键数据结构,我们可以开始讨论使Pandas成为如此强大的数据分析库,并在数据科学和机器学习领域非常流行的特性。
#1. 数据操作
DataFrame和Series对象是可变的。你可以根据需要添加或删除列。此外,Pandas允许你添加行甚至合并数据集。
你可以执行数值计算,例如规范化数据和按元素进行逻辑比较。Pandas还允许你对数据进行分组并应用聚合函数,例如均值、中位数、最大值和最小值。这使得在Pandas中处理数据变得非常容易。
#2. 数据清洗
从现实世界中获取的数据通常包含难以处理或不适合分析或用于机器学习模型的值。数据可能是错误的数据类型、错误的格式,或者可能完全丢失。无论如何,此数据都需要进行预处理,称为清洗,然后才能使用。
Pandas具有帮助你清理数据的功能。例如,在Pandas中,你可以删除重复的行、删除包含缺失数据的列或行,并将值替换为默认值或其他值,例如列的平均值。还有更多的功能和库可以与Pandas一起使用,使你能够进行更多的数据清理。
#3. 数据可视化
此图是使用本节下方的代码生成的。
虽然Pandas不是像Matplotlib这样的专业可视化库,但它具有创建基本数据可视化的功能。尽管它们是基本的,但在大多数情况下仍然可以满足需求。
使用Pandas,你可以轻松绘制条形图、直方图、散点矩阵和其他不同类型的图表。将其与你可以在Python中执行的一些数据操作相结合,你可以创建更复杂的可视化效果以更好地理解你的数据。
import pandas as pd sales_df = pd.DataFrame({ 'Month': ['January', 'February', 'March'], 'Jane Doe': [5000, 6000, 5500], 'John Doe': [4500, 6700, 6000] }) sales_df.set_index(['Month'], inplace=True) sales_df.plot.line()
#4. 时间序列分析
Pandas还支持处理带时间戳的数据。当Pandas将列识别为具有日期时间值时,你可以对该列执行许多操作,这些操作在处理时间序列数据时非常有用。
这些操作包括按时间段对观测结果进行分组并对其应用聚合函数,例如求和或均值,或者使用最小值和最大值获取最早或最新的观测值。当然,你还可以使用Pandas中的时间序列数据做更多的事情。
#5. Pandas的输入/输出
Pandas能够从最常见的数据存储格式中读取数据,包括JSON、SQL转储和CSV。你还可以将数据写入多种这些格式的文件中。
这种读取和写入不同数据文件格式的能力使Pandas能够与其他应用程序无缝互操作,并构建与Pandas良好集成的数据管道。这也是Pandas被众多开发者广泛使用的原因之一。
#6. 与其他库集成
Pandas还拥有丰富的工具和库生态系统,这些工具和库构建在它之上以补充其功能。这使其成为一个更加强大和有用的库。
Pandas生态系统中的工具增强了其在不同领域的功能,包括数据清洗、可视化、机器学习、输入/输出和并行化。Pandas在其文档中维护此类工具的注册表。
Pandas中的性能和效率考量
虽然Pandas在大多数操作中表现出色,但它的运行速度有时会比较慢。好的一面是,你可以优化代码并提高其速度。为此,你必须了解Pandas的构建方式。
Pandas建立在NumPy之上,NumPy是一个用于数值和科学计算的流行Python库。因此,与NumPy一样,Pandas在向量化操作时工作效率更高,而不是使用循环选择单个单元格或行。
向量化是一种并行化形式,其中相同的操作一次应用于多个数据点。这称为SIMD——单指令,多数据。利用向量化操作将显著提高Pandas的速度和性能。
因为DataFrame和Series数据结构在底层使用NumPy数组,所以它们比它们的替代字典和列表更快。
默认的Pandas实现仅在一个CPU内核上运行。另一种加速代码的方法是使用使Pandas能够利用所有可用CPU内核的库,其中包括Dask、Vaex、Modin和IPython。
社区和资源
作为最受欢迎的编程语言中最流行的库之一,Pandas拥有庞大的用户和贡献者社区。因此,有很多资源可用于学习如何使用它。其中包括官方Pandas文档。此外,还有无数的课程、教程和书籍可供学习。
在r/Python和r/DataScience subreddit等Reddit平台也有在线社区,你可以提出问题并获得答案。作为一个开源库,你可以在GitHub上报告问题甚至贡献代码。
最后的话
作为数据科学库,Pandas非常有用和强大。在本文中,我试图通过探索使其成为数据科学家和程序员首选工具的功能来解释它的受欢迎程度。
接下来,了解如何创建Pandas DataFrame。