如何使用正则表达式重命名 Pandas DataFrame 的列?

切尔西

我有一个数据框,其列名如下所示,其中一些列名在 [] 中包含子字符串

'date', 'customer','region[level1]','priority[s2]','planning[WIP]' ...
 Jan.10,  ABC     ,   East[3]      ,    Normal[1] ,    TBD[WIP]    ...   

我想重命名所有列,以便只保留 [] 中的值。

'date','customer','level1','s2','WIP' ...

我试过下面的代码,但一直收到错误代码“NoneType”对象没有属性“组”。哪一部分出了问题?

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]

维克多·斯特里比尤夫

一些注意事项:

  • re.match仅在字符串开头搜索匹配项,re.search用于在字符串内的任何位置查找匹配项
  • [^[]*\[([^]]*)\]匹配零或比其他更多的字符[,然后[,零个或多个比其他字符],然后]它看起来不错,但它是一个模式,你应该使用.str.replace(见下文)。
  • 您会遇到'NoneType' object has no attribute 'groups'问题,因为某些标头与您的模式不匹配(请参阅上面的正则表达式演示。)

您可以使用

import pandas as pd
df = pd.DataFrame([['Jan.10','ABC','East[3]','Normal[1]','TBD[WIP]']], columns=['date','customer','region[level1]','priority[s2]','planning[WIP]'])
df.columns = df.columns.str.replace(r'.*\[([^][]*)].*', r'\1', regex=True)

>>> df
     date customer   level1         s2       WIP
0  Jan.10      ABC  East[3]  Normal[1]  TBD[WIP]

.*\[([^][]*)].*正则表达式匹配

  • .* - 尽可能多的除换行符以外的零个或多个字符
  • \[- 一个[字符
  • ([^][]*)- 第 1 组:除[之外的任何零个或多个字符]
  • ].*-]字符和行的其余部分。

请参阅正则表达式演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用正则表达式删除python pandas DataFrame中的行?

使用正则表达式重命名pandas数据框中的列

如何使用正则表达式匹配按列对Pandas数据进行分组

根据正则表达式字典填充Pandas DataFrame列

如何使用正则表达式将一列拆分为Pandas中的多列?

如何使用Pandas Dataframe列解析和评估数学表达式?

正则表达式解析的新Pandas列

使用正则表达式从pandas列中提取子字符串

重命名数字的Pandas DataFrame列

如何使用Pandas创建新的df列以使用正则表达式获取列名称和值?

在Pandas DataFrame中,如何做正则表达式替换字符串列的值

使用正则表达式从pandas数据框中的列中提取数据

Python-使用正则表达式从Pandas DataFrame中的列(包含字符串)中提取权重并将其添加到新列中

从正则表达式字典创建pandas列

使用正则表达式和字典重命名数据框列

正则表达式将pandas dataframe列分为2个

Pandas - 如何通过对多列值的正则表达式比较来过滤数据框

Python 重命名 Pandas DataFrame 列

如何在pandas df列的条件子集的endswith()中使用正则表达式?

python/pandas:使用正则表达式删除列中以特定内容开头的数据

使用正则表达式修改pandas列

如何使用正则表达式转换 Pandas 中的转换列

使用 tidyselect 和正则表达式重命名 R 数据框的列

Pandas Dataframe 中奇怪的正则表达式交互

如何在循环中重命名 Pandas DataFrame 中的列?

基于正则表达式使用 OR 拆分 DataFrame 列

使用正则表达式重命名多列

pandas 使用正则表达式模式重命名多个列

Pandas:选择列(使用正则表达式)并重命名它们(使用列表)