介绍
众所周知,Pandas是Python的polars数据操作库。然而,它也有一些缺点。在本文中,我们将学习另一个用Rust编写的强大的Python数据操作库。虽然它是用Rust编写的,但它为我们提供了一个额外的Python程序包。这是使用Python开始使用Polars的最简单的方法,类似于Pandas。
学习目标
在本教程中,您将学习以下内容:
- Polars数据操作库的介绍
- 使用Polars进行数据探索
- 比较Pandas与Polars的速度
- 数据操作函数
- 使用Polars进行惰性评估
本文是作为数据科学博文马拉松的一部分发表的。
Polars的特点
- 它比Pandas库更快。
- 它具有强大的表达式语法。
- 它支持惰性评估。
- 它还具有内存效率。
- 它甚至可以处理大于可用RAM的大型数据集。
Polars有两个不同的API,即急切API和惰性API。急切执行类似于pandas,代码在遇到时立即运行,并立即返回结果。另一方面,惰性执行直到您需要开发为止才运行。惰性执行可以更高效,因为它避免运行不必要的代码。惰性执行可以更高效,因为它避免运行不必要的代码,这可以提高性能。
应用/用例
让我们来看一些该库的应用,如下所示:
- 数据可视化:该库与Rust可视化库(如Plotters等)集成,可以用于创建交互式仪表板和美观的可视化,以传达数据的见解。
- 数据处理:由于其支持并行处理和惰性评估,Polars可以有效处理大型数据集。还可以执行各种数据预处理任务,如数据清洗、转换和操作。
- 数据分析:借助Polars,您可以轻松分析大型数据集以获取有意义的见解并进行交付。它为我们提供了各种计算和统计计算的函数。还可以使用Polars进行时间序列分析。
除此之外,还有许多其他应用,例如数据连接和合并、使用强大的表达式语法过滤和查询数据、分析统计数据和总结等。由于其强大的应用,它可以在业务、电子商务、金融、医疗保健、教育、政府等各个领域使用。一个例子是从医院收集实时数据,分析患者的健康状况,并生成可视化,例如患某种疾病的患者的百分比等。
安装
在使用任何库之前,您必须先安装它。可以使用pip命令安装Polars库,如下所示:
pip install polars
要检查是否已安装,请运行以下命令:
import polars as pl
print(pl.__version__)
0.17.3
创建新的数据框
在使用Polars库之前,您需要导入它。这类似于在pandas中创建数据框。
import polars as pl
#创建一个新的数据框
df = pl.DataFrame(
{
'name': ['Alice', 'Bob', 'Charlie','John','Tim'],
'age': [25, 30, 35,27,39],
'city': ['New York', 'London', 'Paris','UAE','India']
}
)
df
加载数据集
Polars库提供了从多个来源加载数据的各种方法。让我们看一个加载CSV文件的例子。
df=pl.read_csv('/content/sample_data/california_housing_test.csv')
df
比较Pandas vs. Polars读取时间
让我们比较两个库的读取时间来了解Polars库有多快。为此,我们使用Python的’time’模块。例如,使用pandas和Polars读取上述加载的csv文件。
import time
import pandas as pd
import polars as pl
# 使用pandas测量读取时间
start_time = time.time()
pandas_df = pd.read_csv('/content/sample_data/california_housing_test.csv')
pandas_read_time = time.time() - start_time
# 使用Polars测量读取时间
start_time = time.time()
polars_df = pl.read_csv('/content/sample_data/california_housing_test.csv')
polars_read_time = time.time() - start_time
print("Pandas读取时间:", pandas_read_time)
print("Polars读取时间:", polars_read_time)
Pandas读取时间: 0.014296293258666992
Polars读取时间: 0.002387523651123047
从上面的输出中可以看出,显然Polars库的读取时间比Pandas库的读取时间更短。如您在代码中所见,我们通过计算开始时间和读取操作后的时间之间的差异来获得读取时间。
让我们再看一个在相同数据帧上使用pandas和Polars库进行简单过滤操作的例子。
start_time = time.time()
res1 = pandas_df[pandas_df['total_rooms']<20]['population'].mean()
pandas_exec_time = time.time() - start_time
# 使用Polars测量读取时间
start_time = time.time()
res2 = polars_df.filter(pl.col('total_rooms')<20).select(pl.col('population').mean())
polars_exec_time = time.time() - start_time
print("Pandas执行时间:", pandas_exec_time)
print("Polars执行时间:", polars_exec_time)
输出:
Pandas执行时间: 0.0010499954223632812
Polars执行时间: 0.0007154941558837891
探索数据
您可以使用“describe”方法打印数据的摘要统计信息,如计数、均值、最小值、最大值等。
df.describe()
shape方法返回数据帧的形状,即总行数和总列数。
print(df.shape)
(3000, 9)
head()函数默认返回数据集的前五行,如下所示:
df.head()
sample()函数给我们一个对数据的印象。您可以从数据集中获取n个样本行。这里,我们从数据集中获取3行随机样本,如下所示:
df.sample(3)
类似地,rows和columns分别返回行和列的详细信息。
df.rows
df.columns
选择和过滤数据
select函数对列应用选择表达式。
示例:
df.select('latitude')
选择多列
df.select('longitude','latitude')
df.select(pl.sum('median_house_value'),
pl.col("latitude").sort(),
)
类似地,filter函数允许您根据特定条件过滤行。
示例:
df.filter(pl.col("total_bedrooms")==200)
df.filter(pl.col("total_bedrooms").is_between(200,500))
分组/聚合
您可以使用“groupby”函数根据特定列对数据进行分组。
示例:
df.groupby(by='housing_median_age').
agg(pl.col('median_house_value').mean().
alias('avg_house_value'))
在这个示例中,我们根据“housing_median_age”列对数据进行分组,并计算每个组的“median_house_value”的平均值,并创建一个名为“avg_house_value”的列。
合并或连接两个数据框
您可以使用Polars提供的各种函数来连接或合并两个数据框。
连接:让我们看一个内连接的示例,内连接在结果数据框中只包含存在连接键的那些行。
示例1:
import polars as pl
# 创建第一个数据框
df1 = pl.DataFrame({
'id': [1, 2, 3, 4],
'emp_name': ['John', 'Bob', 'Khan', 'Mary']
})
# 创建第二个数据框
df2 = pl.DataFrame({
'id': [2, 4, 5,7],
'emp_age': [35, 20, 25,32]
})
df3=df1.join(df2, on="id")
df3
在上面的示例中,我们在两个不同的数据框上执行连接操作,并将连接键指定为“id”列。其他类型的连接操作包括左连接、外连接、交叉连接等。
合并:
要执行两个数据框的合并,我们在Polars中使用concat()函数,如下所示:
import polars as pl
# 创建第一个数据框
df1 = pl.DataFrame({
'id': [1, 2, 3, 4],
'name': ['John', 'Bob', 'Khan', 'Mary']
})
# 创建第二个数据框
df2 = pl.DataFrame({
'id': [2, 4, 5,7],
'name': ['Anny', 'Lily', 'Sana','Jim']
})
df3=pl.concat([df2,df1] )
df3
‘concat()’函数在垂直方向上合并数据框,第一个数据框为‘df2’后面跟着第二个数据框‘df1’的行,因为我们给出的第一个数据框是‘df2’。但是,在执行两个数据框的合并操作时,列名和数据类型必须匹配。
惰性求值
使用Polars库的主要好处是它支持惰性执行。它允许我们推迟计算,直到需要时再执行。这对于大型数据集非常有益,我们可以避免执行不必要的操作,只执行所需的操作。让我们看一个例子:
lazy_plan = df.lazy().
filter(pl.col('housing_median_age') > 2).
select(pl.col('median_house_value') * 2)
result = lazy_plan.collect()
print(result)
在上面的例子中,我们使用lazy()方法定义一个惰性计算计划。该计算计划会筛选大于2的“housing_median_age”列,然后选择“median_house_value”列乘以2。为了执行这个计划,我们使用“collect”方法并将结果存储在result变量中。
结论
总之,Python的Polars数据处理库是处理大型数据集最高效和强大的工具包。Polars库完全使用Python作为编程语言,并与其他广泛使用的库(如NumPy,Pandas和Matplotlib)高效配合。这种互操作性提供了一种简化的数据组合和检查方法,可在不同领域之间创建适应性资源。该库的核心功能,包括数据过滤、聚合、分组和合并,使用户能够以规模处理数据并生成有价值的洞察。
要点
- Polars数据处理库是处理数据的可靠而多功能的解决方案。
- 使用pip命令进行安装,如pip install polars。
- 如何创建数据框架。
- 我们使用“select”函数执行选择操作,使用“filter”函数根据特定条件过滤数据。
- 我们还学会了使用“join”和“concat”合并两个数据框架。
- 我们还了解了使用“lazy”函数计算惰性计划。
常见问题
本文中显示的媒体不归Analytics Vidhya所有,仅由作者自行决定使用。