大きなパンダのデータフレームでIXを使用すると、奇妙な動作に気づきました。
同じデータフレームで.ixを50回続けて呼び出した場合、50の異なるデータフレームで.ixを呼び出した場合よりも10倍速く実行されました。
.ixの舞台裏でキャッシュが行われていますか?下のループがメモリ使用量を2倍にすることに気づきました。なぜメモリが増加するのでしょうか?
この動作を変更する方法はありますか?
まっすぐなnumpyを使用すると、どちらの場合も7.4秒で実行され、メモリの増加は0でした。これが、パンダがキャッシュしていると私に信じさせた理由です。
明らかに、個々の要素ごとに.ixを呼び出したくはありません。
import pandas as pd
import numpy as np
import datetime as dt
print 'pandas', pd.__version__
li_list = []
for i in range(50):
li_list.append(pd.DataFrame(data=np.random.randn(50, 17000)))
print 'starting'
dt_start = dt.datetime.now()
a = 0
for i in range(50):
b = li_list[0] #Only access first element
for j in b.columns:
a += b.ix[i, j]
print (dt.datetime.now()-dt_start).total_seconds()
dt_start = dt.datetime.now()
a = 0
for i in range(50):
b = li_list[i] #Access all in list
for j in b.columns:
a += b.ix[i, j]
print (dt.datetime.now()-dt_start).total_seconds()
出力:
pandas 0.9.1
starting
3.651
22.009