gpt4 book ai didi

python-3.x - Pandas 的 str.strip 性能

转载 作者:行者123 更新时间:2023-12-04 00:58:12 24 4
gpt4 key购买 nike

我认为第三个选项应该是去除空格的最快方法?有人可以给我一些在处理大型数据集时应该应用的一般规则吗?我通常使用 .astype(str) 但显然这对于​​我知道已经是对象的列来说是不值得的。

%%timeit
fcr['id'] = fcr['id'].astype(str).map(str.strip)
10 loops, best of 3: 47.8 ms per loop

%%timeit
fcr['id'] = fcr['id'].map(str.strip)
10 loops, best of 3: 25.2 ms per loop

%%timeit
fcr['id'] = fcr['id'].str.strip(' ')
10 loops, best of 3: 55.5 ms per loop

最佳答案

我们先来看看.map(str.strip)的区别和 .str.strip() (第二种和第三种情况)。
因此,您需要了解什么str.strip()在幕后做:它实际上做了一些 map(str.strip) ,但使用自定义 map处理缺失值的函数。
所以鉴于 .str.strip() 更多.map(str.strip) ,预计此方法将始终较慢(正如您所展示的,在您的情况下,速度会慢 2 倍)。

使用 .str.strip()方法在自动 NaN 处理(或其他非字符串值的处理)方面具有优势。假设“id”列包含一个 NaN 值:

In [4]: df['id'].map(str.strip)
...
TypeError: descriptor 'strip' requires a 'str' object but received a 'float'

In [5]: df['id'].str.strip()
Out[5]:
0 NaN
1 as asd
2 asdsa asdasdas
...
29997 asds
29998 as asd
29999 asdsa asdasdas
Name: id, dtype: object

正如@EdChum 指出的那样,您确实可以使用 map(str.strip)如果您确定没有任何 NaN 值,并且这种性能差异很重要。

回到 fcr['id'].astype(str).map(str.strip) 的另一个区别.如果您已经知道系列中的值是字符串,请执行 astype(str)调用当然是多余的。正是这个调用解释了差异:
In [74]: %timeit df['id'].astype(str).map(str.strip)
100 loops, best of 3: 10.5 ms per loop

In [75]: %timeit df['id'].astype(str)
100 loops, best of 3: 5.25 ms per loop

In [76]: %timeit df['id'].map(str.strip)
100 loops, best of 3: 5.18 ms per loop

请注意,如果您有非字符串值(NaN、数值等),请使用 .str.strip().astype(str).map(str)不会产生相同的结果:
In [11]: s = pd.Series(['  a', 10])

In [12]: s.astype(str).map(str.strip)
Out[12]:
0 a
1 10
dtype: object

In [13]: s.str.strip()
Out[13]:
0 a
1 NaN
dtype: object

如您所见, .str.strip()将非字符串值作为 NaN 返回,而不是将它们转换为字符串。

关于python-3.x - Pandas 的 str.strip 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34862336/

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