有人知道为什么在熊猫系列中直接设置一个项目是如此之慢吗?是我做错了什么,还是就这样?
我运行了几个测试,看看在pandas系列对象上设置值最快的方法是什么。以下是从快到慢的结果:
%%timeit
a = np.empty(1000, dtype='float')
for i in range(len(a)):
a[i] = 1.0
s = pd.Series(data=a)
1000圈,最好为3:630微秒/圈
%%timeit
l = []
for i in range(1000):
l.append(1.0)
s = pd.Series(data=l)
1000个回路,最好3个:每个回路1.05ms
%%timeit
a = np.empty(1000, dtype='float')
s = pd.Series(data=a)
for i in range(len(a)):
s.set_value(i, 1.0)
100个回路,最好3个:每个回路18.5 ms
%%timeit
a = np.empty(1000, dtype='float')
s = pd.Series(data=a)
for i in range(len(a)):
s[i] = 1.0
10个回路,最好每回路3:30.2 ms
%%timeit
a = np.empty(1000, dtype='float')
s = pd.Series(data=a)
for i in range(len(a)):
s.iat[i] = 1.0
10个回路,最好3个:每个回路36.2 ms
%%timeit
a = np.empty(1000, dtype='float')
s = pd.Series(data=a)
for i in range(len(a)):
s.iloc[i] = 1.0
1个回路,最好3个:每个回路280ms
从docs
所以我得到了以下应该是可比的:
对于其他测试:
我想好了直接在series对象上设置值时如何避免索引开销:
从numpy数组初始化序列时,不会复制数据。如果保留对原始数组的引用,则可以对其设置值!
我认为这些方法对于将一个序列初始化为一个常量值更快:
基线
备选方案
相关问题 更多 >
编程相关推荐