【问题标题】:renaming column in dataframe for Pandas using regular expression使用正则表达式为 Pandas 重命名数据框中的列
【发布时间】:2014-12-17 11:20:03
【问题描述】:

我有一个由 Pandas 制作的数据框,我想删除每个列名末尾的空格。我试过类似的东西:

raw_data.columns.values = re.sub(' $','',raw_data.columns.values)

但这不起作用,我在这里做错了什么吗?

【问题讨论】:

  • 如果空格在列名的end,不应该是re.sub(' $', '')吗?
  • 抱歉这里的正则表达式错误,我尝试了更正的,但python回复了type error

标签: python regex pandas


【解决方案1】:

我应该使用re 包:

raw_data = raw_data.rename(columns=lambda x: re.sub(' $','',x))

【讨论】:

  • 这只会删除 1 个空格。如果您想删除所有空格,请使用它。raw_data.columns.values = re.sub(r'[ ]*$','',raw_data.columns.values)
  • 如果生成的列名不唯一,这会起作用吗?
  • 我尝试循环遍历列 [for col in df.columns],使用正则表达式确定我需要删除的内容,然后一一重命名列,这很有效很好,但是很慢。您的解决方案性能更高! (对于上下文:我正在剥离列计数器,即(1),(2),...(300),这就是我需要正则表达式的原因)
【解决方案2】:

@Christian 的回答可能对这个特定问题是正确的,但是对于关于替换列中名称的更一般的问题,我建议创建一个字典理解并将其传递给重命名函数:

df.rename(columns={element: re.sub(r'$ (.+)',r'\1', element, flags = re.MULTILINE) for element in df.columns.tolist()})

就我而言,我想在每列的开头添加一些内容,所以:

df.rename(columns={element: re.sub(r'(.+)',r'x_\1', element) for element in df.columns.tolist()})

您可以使用 inplace=True 参数来实际更改数据框。

【讨论】:

    【解决方案3】:

    我会推荐使用pandas.Series.str.strip

    df.columns = df.columns.str.strip()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-09
      • 1970-01-01
      • 1970-01-01
      • 2020-12-07
      • 2018-03-03
      • 2021-10-22
      • 2020-11-29
      • 2021-11-04
      相关资源
      最近更新 更多