python初学者在这里。我想在某些条件下更改数据框中的列中的某些字符。
数据框如下所示:
import pandas as pd
import numpy as np
raw_data = {'name': ['Willard Morris', 'Al Jennings', 'Omar Mullins', 'Spencer McDaniel'],
'age': [20, 19, 22, 21],
'favorite_color': ['blue (VS)', 'red', 'yellow (AG)', "green"],
'grade': [88, 92, 95, 70]}
df = pd.DataFrame(raw_data, index = ['0', '1', '2', '3'])
df
我的目标是在列的姓氏中替换空格,后跟括号和两个字母。
蓝色,而不是蓝色(VS)。
我必须删除26个字母的变体,但只能删除一种格式:last_name,后跟空格,后跟括号,再后跟两个字母,后跟括号。 据我了解,应该是在regexp中:
( \(..\)
我尝试使用str.replace,但是它仅适用于完全匹配,并且替换了整个值。 我也尝试过:
df.loc[df['favorite_color'].str.contains(‘VS’), 'favorite_color'] = ‘random’
它也替换了整个值。
我看到我只能重写该值,但是我也看到了使用它的方法:
df[0].str.slice(0, -5)
我可以删除包含搜索字串的最后5个字符。
在我的脑海中,我应该列出要删除的26个事件,并分析该列以删除这些事件,同时保留之前的文本。我搜索了与我的问题类似的帖子,但找不到解决方案。你有方向的想法吗?
答案 0 :(得分:2)
您可以将str.replace
与模式"(\(.*?\))"
一起使用
例如:
import pandas as pd
raw_data = {'name': ['Willard Morris', 'Al Jennings', 'Omar Mullins', 'Spencer McDaniel'],
'age': [20, 19, 22, 21],
'favorite_color': ['blue (VS)', 'red', 'yellow (AG)', "green"],
'grade': [88, 92, 95, 70]}
df = pd.DataFrame(raw_data, index = ['0', '1', '2', '3'])
df["newCol"] = df["favorite_color"].str.replace("(\(.*?\))", "").str.strip()
print( df )
输出:
age favorite_color grade name newCol
0 20 blue (VS) 88 Willard Morris blue
1 19 red 92 Al Jennings red
2 22 yellow (AG) 95 Omar Mullins yellow
3 21 green 70 Spencer McDaniel green