这就是为什么Pandas是最受欢迎的Python数据分析库
pandas是python中最受欢迎的数据分析库。它被数据分析师、数据科学家和机器学习工程师广泛使用。
与numpy一起,它是任何与数据和人工智能工作的人必须了解的库和工具之一。
在本文中,我们将探讨pandas以及使其在数据生态系统中如此受欢迎的特性。
pandas是什么?
pandas是一个用于python的数据分析库。这意味着它用于在python代码内部处理和操作数据。使用pandas,您可以高效地读取、操作、可视化、分析和存储数据。
名称“pandas”来自于连接“pan”(面板)和“da”(数据)两个词,这是一个计量经济学术语,指的是通过观察多个个体随时间而获得的数据。pandas最初由wes kinney于2008年1月发布,自那以后已经成为最受欢迎的库之一。
pandas的核心是两个必不可少的数据结构,您应该熟悉,即数据框(dataframes)和序列(series)。当您在pandas中创建或加载数据集时,它表示为这两个数据结构之一。
在下一节中,我们将探讨它们是什么,它们的区别是什么,以及何时使用其中之一是理想的。
关键数据结构
如前所述,pandas中的所有数据都使用两种数据结构之一表示,即数据框(dataframe)或序列(series)。下面详细解释了这两个数据结构。
数据框(dataframe)
pandas中的数据框是一个带有列和行的二维数据结构。它类似于电子表格应用程序中的电子表格或关系数据库中的表。
它由列组成,每一列代表数据集中的一个属性或特征。这些列由个体值组成。此列表或个体值的系列表示为序列(series)对象。我们将在本文稍后详细讨论序列数据结构。
数据框中的列可以有描述性名称,以便区分彼此。这些名称在创建或加载数据框时分配,但可以随时轻松重命名。
列中的值必须是相同的数据类型,尽管列不必保存相同类型的数据。这意味着数据集中的名称列将仅存储字符串。但是同一数据集可以有其他列,如存储整数的年龄列。
数据框还有一个用于引用行的索引。不同列之间但具有相同索引的值形成一行。默认情况下,索引是编号的,但可以重新分配以适应数据集。在上面的示例(上图中,下面的代码),我们将索引列设置为“months”列。
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用于表示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 = ['一月', '二月', '三月']
total_sales = total_sales.set_axis(months)
print(total_sales)
pandas的特点
现在你已经了解了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识别到一列具有日期时间值时,您可以对同一列执行许多在处理时间序列数据时有用的操作。
这些操作包括按时间段对观测进行分组并应用聚合函数,如sum
或mean
,或者使用min和max获取最早或最晚的观测值。当然,在pandas中可以对时间序列数据进行更多的操作。
#5. pandas中的输入/输出
pandas能够从最常见的数据存储格式中读取数据。其中包括json、sql转储和csvs。您还可以将数据写入许多这些格式的文件中。
这种读取和写入不同数据文件格式的能力使得pandas能够无缝地与其他应用程序互操作,并构建与pandas良好集成的数据流水线。这是pandas被许多开发人员广泛使用的原因之一。
#6. 与其他库的集成
pandas还有一个丰富的工具和库生态系统,建立在其之上以补充其功能。这使它成为一个更强大和有用的库。
pandas生态系统中的工具增强了其在数据清理、可视化、机器学习、输入/输出和并行化等不同领域的功能。pandas在其文档中维护了这些工具的注册表。
pandas中的性能和效率考虑
尽管pandas在大多数操作中表现出色,但它可以非常慢。好消息是,您可以优化代码并提高其速度。要做到这一点,您必须了解pandas的构建方式。
pandas是建立在流行的python库numpy之上的,用于数值和科学计算。因此,像numpy一样,pandas在操作矢量化时更有效,而不是使用循环选择单个单元格或行。
矢量化是一种并行化形式,其中同一操作同时应用于多个数据点。这被称为simd – 单一指令,多个数据。利用矢量化操作将极大地提高pandas的速度和性能。
因为它们在内部使用numpy数组,所以dataframe和series数据结构比它们的替代品字典和列表更快。
默认的pandas实现只能在一个cpu核心上运行。加速代码的另一种方法是使用能够使pandas利用所有可用的cpu核心的库。这些库包括dask、vaex、modin和ipython。
社区和资源
pandas作为最流行的编程语言之一的流行库,拥有庞大的用户和贡献者社区。因此,有很多资源可以学习如何使用它。其中包括官方pandas文档。但也有无数的课程、教程和书籍可以学习。
此外,还有在线社区,如reddit的r/python和r/data science子论坛,可以提问和获取答案。作为一个开源库,您可以在github上报告问题,甚至贡献代码。
最后的话
pandas作为一个数据科学库非常有用和强大。在本文中,我试图通过探索使其成为数据科学家和程序员首选工具的特性来解释其受欢迎程度。
接下来,查看如何创建pandas dataframe。