在大熊猫数据帧上使用 IX 时,我注意到一些奇怪的行为。
当我在同一数据帧上连续调用 .ix 50 次时,它的运行速度比我在 50 个不同数据帧上调用 .ix 时快 10 倍。
.ix 的幕后是否有缓存?我注意到底部循环使我的内存使用量增加了一倍。为什么内存会增加?
有没有办法修改这种行为?
请注意,如果您直接使用 numpy,它在两种情况下都在 7.4 秒内运行,内存增加为 0,这就是让我相信 pandas 正在缓存的原因。
显然,您永远不想在每个单独的元素上调用 .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