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
参数表示按行应用函数,这里的函数就是判断a
和b
列的和是否大于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的使用有所帮助。