我正在按顺序处理字符串。但是,它看起来很庞大,并且在代码执行方面的性能可能也不高。有没有更好的方法可以在函数中运行它?
reg = r'[()\d-]{7,}'
答案 0 :(得分:1)
Github Issue #634的解决方案很酷,但是效率不高。如果您的问题是效率,可以考虑我的解决方案(使用正则表达式)快大约2倍。 这是我的代码:
import re
columns = df.columns
skipped = '[ &()]'
formatted_columns = [re.sub(skipped, '', col).lower() for col in columns]
df.columns = formatted_columns
以下是测量值:
%%timeit
columns = df.columns
formatted_columns = [re.sub(skipped, '', col).lower() for col in columns]
df.columns = formatted_columns
# 231 µs ± 56.2 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%%timeit
df.columns = df.columns.str.replace('[ &()]', '').str.lower()
# 483 µs ± 112 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%%timeit
df.columns = df.columns.str.lower().str.replace('[ &()]', '')
# 500 µs ± 71.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
您可以找到一个漂亮的答案Github Issue #454,在其中可以找到许多执行时间的比较。
答案 1 :(得分:0)
如评论中所述,您可以使用正则表达式同时替换多个字符。此外,您还可以链接各种替换,因为lower
和replace
都在适当的替换后返回对象的副本:
df.columns = df.columns.str.lower().str.replace('[ &()]', '')
或
df.columns = df.columns.str.replace('[ &()]', '').str.lower()