gpt4 book ai didi

python - numpy 的 ones_like 的 pandas 版本

转载 作者:太空宇宙 更新时间:2023-11-04 10:06:43 24 4
gpt4 key购买 nike

考虑 pd.Series s

s = pd.Series([.4, .5, .6], list('abc'))
s

a 0.4
b 0.5
c 0.6
dtype: float64

我以前做过这个以获得一系列的

pd.Series(np.ones_like(s.values), s.index, name=s.name)

a 1.0
b 1.0
c 1.0
dtype: float64

什么是更好的方法?

最佳答案

您可以使用 Series.copy并通过禁用它的 deep 参数来加速整个过程。稍后,使用 ndarray.fill用 1 填充系列中存在的所有这些值。

我们拿一个DF来说明它的值被Nan填了一半:

np.random.seed(42)
df = pd.DataFrame(np.random.randn(10**6,), columns=['A'])
# Populate values with Nans
df.loc[df.sample(frac=0.5).index] = np.NaN

df.shape
# (1000000, 1)

def fill_ones_with_modify():
ser = df['A'].copy(deep=False) # use copy() → without modifying the original DF
ser.values.fill(1)
return ser

%timeit fill_ones_with_modify()
1000 loops, best of 3: 837 µs per loop

注意:这对系列操作 inplace,因此 DF 的结果系列将是也改变了(用 1 填充)。


另一种方法是将系列作为 DF 的单个列进行访问,并在复制后将其展平以返回一个系列对象。然而,这需要更多时间,因为基础数据和索引已被复制。 上行 - 不修改引用的系列对象。

def fill_ones_without_modify():
ser = df[['A']].copy(deep=False).squeeze()
ser.values.fill(1)
return ser

%timeit fill_ones_without_modify()
100 loops, best of 3: 6.4 ms per loop

关于python - numpy 的 ones_like 的 pandas 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40638285/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com