Python Pandas / tqdm显示提取进度

时间:2018-09-27 13:34:17

标签: python pandas tqdm

我有一个大熊猫系列,有1亿700万个字符串行。我在上面运行了一个正则表达式摘录(因此任务是独立于行顺序的,可以并行运行),这需要几个小时,看起来像这样

df["big_string_column"].str.extract(r"Name: (.*), Value: (.*)") 

df["big_string_column"].str.extractall(r"Name: (.*), Value: (.*)")

这将返回具有两个捕获组和列的新DataFrame。

是否可以使用tqdm或其他方式显示此进度? :)

是否可以将其重构为dataframe.progress_apply,从而保留来自正则表达式的捕获组而不会造成重大性能影响(因为pd.Series.str.extract优化了正则表达式)还是存在完全不同的方法?

1 个答案:

答案 0 :(得分:1)

我不知道.str.extract返回的任何进度报告功能。将其更改为.apply以使用.progress_apply可能会导致性能下降。

它既不是漂亮的也不是单线的,但是如果完成的工作是与行无关的(没有分组),则您始终可以将df分成多个块,在这些块上独立进行工作,然后将它们合并在一起。然后,您可以使用tqdm逐块跟踪进度。

类似这样的东西:

# 1000 sections as an example, may need to adapt to your problem
chunks = np.array_split(df, 1000)

processed = []
for chunk in tqdm(chunks):
    processed.append(chunk.str.extract(r"Name: (.*), Value: (.*)"))

out = pd.concat(processed)