有谁知道为什么直接在熊猫系列上设置项目是如此令人难以置信的慢?我做错了什么,或者只是它的方式?
我运行了几个测试,看看在pandas Series对象上设置值的最快方法是什么.以下是从快到慢排序的结果:
%%timeit
a = np.empty(1000, dtype='float')
for i in range(len(a)):
a[i] = 1.0
s = pd.Series(data=a)
Run Code Online (Sandbox Code Playgroud)
1000个循环,最佳3:630μs/循环
%%timeit
l = []
for i in range(1000):
l.append(1.0)
s = pd.Series(data=l)
Run Code Online (Sandbox Code Playgroud)
1000循环,最佳3:每循环1.05毫秒
%%timeit
a = np.empty(1000, dtype='float')
s = pd.Series(data=a)
for i in range(len(a)):
s.set_value(i, 1.0)
Run Code Online (Sandbox Code Playgroud)
100个循环,最佳3:每循环18.5毫秒
%%timeit
a = np.empty(1000, dtype='float')
s = pd.Series(data=a)
for i in range(len(a)):
s[i] = 1.0
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
1个循环,每个循环最好为3:280 ms
来自文档
由于使用[]进行索引必须处理很多情况(单标签访问,切片,布尔索引等),因此要弄清楚您要的内容有很多开销。
所以我得到以下内容应该可以比较:
In [13]:
%%timeit
a = np.empty(1000,dtype='float')
s = pd.Series(data=a)
for i in range(len(a)):
s.iat[i] = 1.0
10 loops, best of 3: 23.3 ms per loop
In [14]:
%%timeit
a = np.empty(1000,dtype='float')
s = pd.Series(data=a)
for i in range(len(a)):
s.iloc[i] = 1.0
10 loops, best of 3: 159 ms per loop
Run Code Online (Sandbox Code Playgroud)
对于其他测试:
In [15]:
%%timeit
l = []
for i in range(1000):
l.append(1.0)
s = pd.Series(data=l)
1000 loops, best of 3: 525 µs per loop
In [16]:
%%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 loops, best of 3: 10.1 ms per loop
In [17]:
%%timeit
a = np.empty(1000,dtype='float')
s = pd.Series(data=a)
for i in range(len(a)):
s[i] = 1.0
100 loops, best of 3: 17.5 ms per loop
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7270 次 |
| 最近记录: |