通过在 pandas 中切片来更改系列中的行的最快方法?
Fastest way to changes rows in a Series by slicing in pandas?
我在 pandas 中有一个大型系列数据结构,我需要使用切片来编辑某些值。我从以下代码开始:
import numpy as np
import pandas as pd
vec = np.random.randn(1e7)
sr = pd.Series(vec)
idx = (np.random.rand(10000)*1000).astype(int)
使用 idx 替换 vec 中的元素要快得多
timeit vec[idx] = 1.2
10000 loops, best of 3: 32.5 µs per loop
比 pandas 结构
timeit sr[idx] = 1.2
1 loops, best of 3: 391 µs per loop
timeit sr.iloc[idx] = 1.2
1000 loops, best of 3: 201 µs per loop
对于此特定操作,pandas 有没有办法获得与 numpy 相同的性能?
sr.values[idx] = 1.2
的性能与 vec[idx] = 1.2
:
相当
In [101]: %timeit vec[idx] = 1.2
10000 loops, best of 3: 25.8 µs per loop
In [102]: %timeit sr.values[idx] = 1.2
10000 loops, best of 3: 27.3 µs per loop
我在 pandas 中有一个大型系列数据结构,我需要使用切片来编辑某些值。我从以下代码开始:
import numpy as np
import pandas as pd
vec = np.random.randn(1e7)
sr = pd.Series(vec)
idx = (np.random.rand(10000)*1000).astype(int)
使用 idx 替换 vec 中的元素要快得多
timeit vec[idx] = 1.2
10000 loops, best of 3: 32.5 µs per loop
比 pandas 结构
timeit sr[idx] = 1.2
1 loops, best of 3: 391 µs per loop
timeit sr.iloc[idx] = 1.2
1000 loops, best of 3: 201 µs per loop
对于此特定操作,pandas 有没有办法获得与 numpy 相同的性能?
sr.values[idx] = 1.2
的性能与 vec[idx] = 1.2
:
In [101]: %timeit vec[idx] = 1.2
10000 loops, best of 3: 25.8 µs per loop
In [102]: %timeit sr.values[idx] = 1.2
10000 loops, best of 3: 27.3 µs per loop