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

Python 一种更有效的按顺序格式化字符串的方法?,python,python-3.x,pandas,Python,Python 3.x,Pandas,我正在按顺序操作字符串。但是,它看起来很笨重,而且在代码执行中可能没有效率。有没有更好的方法可以在函数中运行 df=['Apple sauce','Banana & peach','c(&)a'] df.columns = df.columns.str.lower() df.columns = df.columns.str.replace(' ', '') df.columns = df.columns.str.replace('&','') df.columns =

我正在按顺序操作字符串。但是,它看起来很笨重,而且在代码执行中可能没有效率。有没有更好的方法可以在函数中运行

df=['Apple sauce','Banana & peach','c(&)a']

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

Desired Out: df=['applesauce','bananapeach','ca']

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

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

的解决方案很酷,但效率不高。如果你的问题是效率问题,你可以用ReEX来考虑我的解决方案大约快2倍。 这是我的代码:

import re
columns = df.columns
skipped = '[ &()]'
formatted_columns = [re.sub(skipped, '', col).lower() for col in columns]
df.columns = formatted_columns
以下是测量结果:

1.正则表达式 2.str.lower和str.replace
您可以找到一个漂亮的答案,在这里可以找到许多关于执行时间的比较。

请记住,df.str.replace默认使用正则表达式,因此您可以只使用字符组进行替换。df.columns.str.replace'[&]',@AlexanderHuszagh非常感谢!我们如何在代码中输入lower命令?只需分两步操作:df.columns=df.columns.str.lower,然后df.columns=df.columns.str.replace'[&]',即可,。
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)