【问题标题】:Applying Regex across entire column of a Dataframe在数据框的整个列中应用正则表达式
【发布时间】:2019-12-22 13:01:00
【问题描述】:

我有一个包含 3 列的数据框:

id,name,team 
101,kevin, marketing
102,scott,admin\n
103,peter,finance\n

我正在尝试应用一个正则表达式函数来删除不必要的空格。我已经得到了删除这些空格的代码,但是我无法在整个数据帧中循环它。

这是我迄今为止尝试过的:

df['team'] = re.sub(r'[\n\r]*','',df['team'])

但这会引发错误AttributeError: 'Series' object has no attribute 're'

谁能建议我如何在整个 Dataframe df['team'] 列中循环这个正则表达式

【问题讨论】:

  • 未测试 df["team"]=df["team"].str.strip()

标签: python python-3.x pandas


【解决方案1】:

你快到了,有两种简单的方法:

# option 1 - faster way
df['team'] =  [re.sub(r'[\n\r]*','', str(x)) for x in df['team']]

# option 2
df['team'] =  df['team'].apply(lambda x: re.sub(r'[\n\r]*','', str(x)))

【讨论】:

  • 感谢回复,但我收到错误“TypeError: expected string or bytes-like object”
  • @hellokee 我不知道team 是什么类型,我做了一个小改动,你现在可以试试吗?
  • 在 Pandas pandas.pydata.org/pandas-docs/stable/reference/api/…中有一个相同的内置函数
【解决方案2】:

只要是数据框检查替换https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.replace.html

df['team'].replace( { r"[\n\r]+" : '' }, inplace= True, regex = True)

关于正则表达式,'*' 表示 0 或更多,你应该需要 '+' 即 1 或更多

【讨论】:

    【解决方案3】:

    这是一种强大的技术,可以在没有循环的情况下一步替换 pandas 列中的多个单词。在我的代码中,我想在不使用循环的情况下从我的列中删除“CORPORATION”、“LLC”等内容(所有这些内容都在 RemoveDB.csv 文件中)。在这种情况下,我会一步从整个列中删除 40 个单词。

    RemoveDB = pd.read_csv('RemoveDBcsv')
    RemoveDB = RemoveDB['REMOVE'].tolist()
    RemoveDB = '|'.join(RemoveDB)
    pattern = re.compile(RemoveDB)    
    df['NAME']= df['NAME'].str.replace(pattern,'', regex = True)
    

    【讨论】:

      【解决方案4】:

      另一个例子(但没有正则表达式)但可能对某人仍然有用。

      id = pd.Series(['101','102','103'])
      name = pd.Series(['kevin','scott','peter'])
      team = pd.Series(['     marketing','admin\n', 'finance\n'])
      
      testsO = pd.DataFrame({'id': id, 'name': name, 'team': team})
      print(testsO)
      testsO['team'] = testsO['team'].str.strip()
      print(testsO)
      

      【讨论】:

        猜你喜欢
        • 2019-02-21
        • 2021-09-26
        • 2021-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-04
        相关资源
        最近更新 更多