我有一个dataframe,它的列名如下所示,其中一些列名的子字符串在[]
'date', 'customer','region[level1]','priority[s2]','planning[WIP]' ...
Jan.10, ABC , East[3] , Normal[1] , TBD[WIP] ...
我想重命名所有列,以便只保留[]中的值
'date','customer','level1','s2','WIP' ...
我尝试了下面的代码,但不断得到错误代码“NoneType”,对象没有属性“groups”。哪一部分出错了
import re
for i in range(len(df.columns)):
df.columns.value[i] = [re.match(r"[^[]*\[([^]]*)\]", col_name).groups()[0] for col_name in df.columns]
您可以像下面这样使用
apply
和re.sub()
:输出:
几点注意:
re.match
仅在字符串开头搜索匹配项,使用re.search
在字符串中的任何位置查找匹配项[^[]*\[([^]]*)\]
匹配除[
之外的零个或多个字符,然后是[
,除]
之外的零个或多个字符,然后是]
和it looks good,但这是一种应该与.str.replace
一起使用的模式(见下文)李>'NoneType' object has no attribute 'groups'
问题,因为某些标头与您的模式不匹配(请参阅上面的正则表达式演示)你可以用
.*\[([^][]*)].*
正则表达式匹配.*
-尽可能多的零个或多个字符(换行字符除外)\[
-a[
字符([^][]*)
-第1组:除[
和]
之外的任何零个或多个字符].*
-]
字符和行的其余部分李>见regex demo
你可以试试
str.replace
找到的正则表达式的详细信息here更改列名的步骤
相关问题 更多 >
编程相关推荐