Pandas 使用TQDM进度条

Pandas 使用TQDM进度条

在本文中,我们将介绍如何在Pandas中使用TQDM进度条。Pandas是Python中广泛使用的数据分析库,而TQDM是Python中常用的进度条库。使用TQDM进度条可以更好地了解任务进展情况,提高效率,那么如何结合Pandas使用呢?接下来,我们将详细讲解。

阅读更多:Pandas 教程

安装依赖库

首先,需要安装Pandas和TQDM库。可以通过以下方式安装:

pip install pandas
pip install tqdm

简单示例

在Pandas中简单使用TQDM进度条非常简单,只需要在Pandas中使用progress_apply()progress_map()函数,即可显示进度条。例如下面的代码:

import pandas as pd
from tqdm import tqdm

df = pd.DataFrame({'a': [1, 2, 3], 'b': [4, 5, 6]})

tqdm.pandas() #使用tqdm进度条

df['a_squared'] = df['a'].progress_apply(lambda x: x**2) 

print(df)

输出结果为:

   a  b  a_squared
0  1  4          1
1  2  5          4
2  3  6          9

这里通过progress_apply()df['a']这个Series中每个元素进行平方计算,生成一个新的列a_squared。同时用了progress_map()函数也可以实现相同的效果:

import pandas as pd
from tqdm import tqdm

df = pd.DataFrame({'a': [1, 2, 3], 'b': [4, 5, 6]})

tqdm.pandas() #使用tqdm进度条

df['a_squared'] = df['a'].progress_map(lambda x: x**2) 

print(df)

同样输出结果为:

   a  b  a_squared
0  1  4          1
1  2  5          4
2  3  6          9

复杂示例

上述代码是一个简单的例子,现在来看一个更复杂的例子。我们将试图使用progress_apply()和TQDM进度条计算Pandas中两个DataFrame的笛卡尔积,并过滤掉其中一些元素。

import pandas as pd
import numpy as np
from itertools import product
from tqdm import tqdm

def cartesian_filter(df_1, df_2):
    tqdm.pandas() #使用tqdm进度条

    df_1['key'] = 0
    df_2['key'] = 0

    new_df = pd.merge(df_1, df_2, on='key').drop(columns=['key'])

    new_df = new_df[(new_df['a'] + new_df['b']) > 1]

    return new_df


# 创建两个DataFrame
df_1 = pd.DataFrame({'a': np.random.randint(0, 5, 3)})
df_2 = pd.DataFrame({'b': np.random.randint(0, 5, 3)})

# 计算笛卡尔积并过滤元素
result = cartesian_filter(df_1, df_2)

这里的函数cartesian_filter()用于计算笛卡尔积,并过滤掉相加结果小于等于1的元素。使用progress_apply()计算笛卡尔积并计算进度条,代码如下:

def cartesian_filter(df_1, df_2):
    tqdm.pandas() #使用tqdm进度条

    df_1['key'] = 0
    df_2['key'] = 0

    new_df = pd.merge(df_1, df_2, on='key').drop(columns=['key'])

    new_df = new_df[new_df.progress_apply(lambda x: (x['a'] + x['b']) > 1, axis=1)]

    return new_df

progress_apply()函数中使用了axis=1参数表示按行应用函数,这里的函数就是判断ab列的和是否大于1。运行结果如下:

100%|██████████| 9/9 [00:00<00:00, 2050.20it/s]
   a  b
1  2  2
2  1  4
3  2  4
4  1  2
5  1  3
6  3  2

可以看到,计算过程中显示了进度条,同时输出了最终经过过滤的DataFrame。

进度条自定义

默认情况下,TQDM进度条在每次更新时都会显示当前进度和剩余时间等信息。但有时我们可能想要自定义进度条的外观,比如显示任意文本、百分比等。这时可以使用tqdm()函数中的参数来自定义进度条。例如:

import pandas as pd
from tqdm import tqdm

df = pd.DataFrame({'a': [1, 2, 3], 'b': [4, 5, 6]})

tqdm.pandas(desc='正在处理数据') #自定义进度条文本

df['a_squared'] = df['a'].progress_apply(lambda x: x**2) 

print(df)

这里使用了desc参数自定义了进度条文本,运行结果如下:

正在处理数据: 100%|██████████| 3/3 [00:00<00:00, 3060.12it/s]
   a  b  a_squared
0  1  4          1
1  2  5          4
2  3  6          9

总结

本文介绍了如何在Pandas中使用TQDM进度条,在计算量大的情况下,使用进度条可以更好地了解任务进展情况,提高效率。同时,我们还介绍了进度条的自定义,可以根据需要自行调整。希望能对大家掌握Pandas和TQDM的使用有所帮助。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程