我有一个包含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']
列中循环使用此正则表达式
答案 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)