我有一个大熊猫系列,有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优化了正则表达式)还是存在完全不同的方法?
答案 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)