当从SQL数据库读取大量关系到熊猫数据时,最好有一个进度条,因为元组的数量是静态的,I/O率可以估计。看起来,tqdm模块有一个函数tqdm_pandas,它将报告在列上映射函数的进度,但是默认情况下,调用它不会像这样报告I/O的进度。是否可以使用tqdm在调用pd.read_sql时生成进度条?
发布于 2016-10-27 22:51:12
编辑:答案具有误导性- chunksize对操作的数据库端没有任何影响。见下文的评论。
您可以使用chunksize参数执行如下操作:
chunks = pd.read_sql('SELECT * FROM table', con=conn, chunksize=100)
df = pd.DataFrame()
for chunk in tqdm(chunks):
df = pd.concat([df, chunk])我认为这也会减少内存的使用。
发布于 2022-11-14 18:25:00
是!你可以的!
扩展答案这里和亚历克斯答案,以包括tqdm,我们得到:
# get total number or rows
q = f"SELECT COUNT(*) FROM table"
total_rows = pd.read_sql_query(q, conn).values[0, 0]
# note that COUNT implementation should not download the whole table.
# some engine will prefer you to use SELECT MAX(ROWID) or whatever...
# read table with tqdm status bar
q = f"SELECT * FROM table"
output = []
rows_in_chunk = 1_000
for chunk_dataframe in tqdm(pd.read_sql(q, conn, chunksize=rows_in_chunk), total=total_rows/rows_in_chunk):
output.append(chunk_dataframe)
df = pd.concat(output)输出示例:
39%|███▉ | 99/254.787 [01:40<02:09, 1.20it/s]https://stackoverflow.com/questions/40282478
复制相似问题