私は(マーキングパフォーマンスベンチのテストを実行している)として、以下のシナリオを持っている:することはできません再利用パンダジェネレータオブジェクト
def read_sql_query(query, chunk_size, cnxn):
try:
df = pd.read_sql_query(query, cnxn, index_col=['product_key'], chunksize=100000)
return df
except Exception as e:
print(e)
def return_chunks_in_df(df, start_date, end_date):
try:
sub_df = pd.DataFrame()
for chunks in df:
sub_df = pd.concat([sub_df, chunks.loc[(chunks['trans_date'] > start_date) & (chunks['trans_date'] < end_date)]], ignore_index=True)
print(sub_df.info())
return sub_df
except Exception as e:
print(e)
query = r"select * from sales_rollup where product_key in (select product_key from temp limit 10000)"
start_time = timeit.default_timer()
df = read_sql_query(query, 100000, cnxn)
print(df)
print('time to chunk:' + str(timeit.default_timer() - start_time))
#scenario 1
start_time = timeit.default_timer()
sub_df1 = return_chunks_in_df(df, '2015-01-01', '2016-01-01')
print('scenario1:' + str(timeit.default_timer() - start_time))
#scenario 2
start_time = timeit.default_timer()
sub_df2 = return_chunks_in_df(df, '2016-01-01', '2016-12-31')
print('scenario2:' + str(timeit.default_timer() - start_time))
私が午前問題は、データフレームは、常に0の行をたとえ返しシナリオ2でありますフィルタリングされた日付範囲のデータがあります。私は(DFをループしようとした)が、以下のループが実行されることはありません:
for chunks in df:
print(chunks.info())
私は、私はちょうど実行前に以下のように再びDFを再作成する場合、結果はシナリオ2のために設定を取得することができる午前:
df = read_sql_query(query, 100000, cnxn)
シナリオを実行する最初のコアの問題は、常に2番目のシナリオではない値を返します。 dfオブジェクトは最初の実行後に何とか失効しますか? ヘルプ/ポインターを高く評価しました。
ダウン投票で何理由を述べることなく? – Abhi