Progress bar for pandas.DataFrame.to_sql
我想将数据从大型csv文件迁移到sqlite3数据库。
我使用pandas在Python 3.5上的代码:
1 2 3 | con = sqlite3.connect(DB_FILENAME) df = pd.read_csv(MLS_FULLPATH) df.to_sql(con=con, name="MLS", if_exists="replace", index=False) |
是否可以打印执行to_sql方法的当前状态(进度条)?
我查看了关于tqdm的文章,但没有找到如何做到这一点。
Unfortuantely
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | import sqlite3 import pandas as pd from tqdm import tqdm DB_FILENAME='/tmp/test.sqlite' def chunker(seq, size): # from http://stackoverflow.com/a/434328 return (seq[pos:pos + size] for pos in xrange(0, len(seq), size)) def insert_with_progress(df, dbfile): con = sqlite3.connect(dbfile) chunksize = int(len(df) / 10) # 10% with tqdm(total=len(df)) as pbar: for i, cdf in enumerate(chunker(df, chunksize)): replace ="replace" if i == 0 else"append" cdf.to_sql(con=con, name="MLS", if_exists=replace, index=False) pbar.update(chunksize) df = pd.DataFrame({'a': range(0,100000)}) insert_with_progress(df, DB_FILENAME) |
注意我在这里生成DataFrame inline是为了拥有一个没有依赖性的完整可行的例子。
结果令人惊叹: