一种更有效的顺序格式化字符串的方法?

时间:2019-09-10 00:10:36

标签: python python-3.x pandas

我正在按顺序处理字符串。但是,它看起来很庞大,并且在代码执行方面的性能可能也不高。有没有更好的方法可以在函数中运行它?

reg = r'[()\d-]{7,}'

2 个答案:

答案 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

以下是测量值:

1。正则表达式

%%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)

2。 str.lower()和str.replace()

%%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)

如评论中所述,您可以使用正则表达式同时替换多个字符。此外,您还可以链接各种替换,因为lowerreplace都在适当的替换后返回对象的副本:

df.columns = df.columns.str.lower().str.replace('[ &()]', '')

df.columns = df.columns.str.replace('[ &()]', '').str.lower()