在数据框的整个列上应用正则表达式

时间:2018-12-28 18:28:32

标签: python python-3.x pandas

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

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

我正在尝试应用正则表达式函数,以便删除不必要的空格。我有删除这些空间的代码,但是我无法遍历整个Dataframe。

这是我到目前为止尝试过的:

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

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

任何人都可以建议我如何在整个Dataframe df['team']列中循环使用此正则表达式

4 个答案:

答案 0 :(得分: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)))

答案 1 :(得分:1)

只要是数据框,请检查替换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或更大

答案 2 :(得分:0)

另一个示例(但不带正则表达式),但对某些人可能仍然有用。

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)

答案 3 :(得分:0)

这是一项强大的技术,可一步一步替换熊猫列中的多个单词,而无需循环。在我的代码中,我想在不使用循环的情况下从列中消除“ 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)