2016-10-12 24 views
1
from pandas import DataFrame 
import time 

data = [] 
for i in range(3000): 
    data.append(['SH601318', 'abcdef', 0.0001215, 0.000215, 0.125, 0.243]) 
df = DataFrame(data) 
df.columns = ['symbol', 'name', 'total_ratio', 'outstanding_ratio', 'avg_total_ratio', 'avg_outstanding_ratio'] 

t = time.time() 
result = [{ 
    'symbol': df.at[i, 'symbol'], 
    'name': df.at[i, 'name'], 
    'total_ratio': df.at[i, 'total_ratio'], 
    'outstanding_ratio': df.at[i, 'outstanding_ratio'], 
    'avg_total_ratio': df.at[i, 'avg_total_ratio'], 
    'avg_outstanding_ratio': df.at[i, 'avg_outstanding_ratio'], 
} for i in range(len(df))] 
print '%.2f seconds' % (time.time() - t) 
# 0.25 seconds 

t = time.time() 
result = [df.iloc[i].to_dict() for i in range(len(df))] 
print '%.2f seconds' % (time.time() - t) 
# 0.58 seconds 

DataFrameをdictのリストに変換する2つの方法を試しました。しかし、どちらも非常に遅い、250ミリ秒と580ミリ秒です!それは私がデータベースから照会する時間以上です。結局のところ、メモリを操作することはディスクより速いので、なぜ時間がかかるのか分かりません。私はこの時間が10ミリ秒であると思った。私はそれを達成する方法はありますか?Dataframeをdictのリストに変換するのが遅すぎる

+3

なぜ 'df.to_dict(オリエント= '記録')'? – Zero

+0

私は、余分な時間はループから来ていると推測することができます。各反復のオーバーヘッドは、あなたがシリーズを作成しているという事実と、各反復の 'to_dict'メソッドのオーバーヘッドです。 –

+2

@JohnGalt誤って[別の質問](http://stackoverflow.com/questions/29815129/pandas-dataframe-to-list-of-dictionaries-dics)で回答を無視します。 – gzc

答えて

2

私はあなたがパラメータorient='records'to_dictが必要だと思う:

print (df.to_dict(orient='records')) 
関連する問題