Python Pandas/tqdm 显示提取进度
Python Pandas/tqdm show progress for extract
我有一个巨大的 pandas 系列,包含 10.07 亿行字符串。我在上面 运行 正则表达式提取(因此任务与行顺序无关,它可以 运行 并行)这需要几个小时,看起来像这样
df["big_string_column"].str.extract(r"Name: (.*), Value: (.*)")
或
df["big_string_column"].str.extractall(r"Name: (.*), Value: (.*)")
这是一个包含 2 个捕获组和列的新 DataFrame returns。
有没有办法使用 tqdm 或其他工具来显示这方面的进展? :)
是否可以将其重构为 dataframe.progress_apply 以保留来自正则表达式的捕获组而不会对性能造成重大影响(因为 pd.Series.str.extract 优化了正则表达式)还是有完全不同的方法?
我不知道 .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)
我有一个巨大的 pandas 系列,包含 10.07 亿行字符串。我在上面 运行 正则表达式提取(因此任务与行顺序无关,它可以 运行 并行)这需要几个小时,看起来像这样
df["big_string_column"].str.extract(r"Name: (.*), Value: (.*)")
或
df["big_string_column"].str.extractall(r"Name: (.*), Value: (.*)")
这是一个包含 2 个捕获组和列的新 DataFrame returns。
有没有办法使用 tqdm 或其他工具来显示这方面的进展? :)
是否可以将其重构为 dataframe.progress_apply 以保留来自正则表达式的捕获组而不会对性能造成重大影响(因为 pd.Series.str.extract 优化了正则表达式)还是有完全不同的方法?
我不知道 .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)