繁体   English   中英

从数据框中的字符串中删除字符

[英]Remove characters from a string in a dataframe

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个事件,并分析该列以删除这些事件,同时保留之前的文本。 我搜索了与我的问题类似的帖子,但找不到解决方案。 你有方向的想法吗?

您可以将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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM