如何根据不同的值对一个 Pandas 数据框列的元素进行切片?

How can I slice elements of one Pandas dataframe column by different values?

我有一个“脏”csv 文件加载到 Pandas 数据框中。一列“姓名”有时会带有前缀(例如实际姓名前的“(3.)”)。

我了解此前缀的分类法并知道如何查找索引,从中我想保留字符串的其余部分:

df["Indexes"]= df["Name"].str.find(')') 

但是:如何将 evertying 减少到该索引?

例如,如果“姓名”是“(3.) Peter”,我希望它变成“Peter”。

假设我想使用 slice。我的问题是我需要切片的值每行都不同。 -- 如果前缀的长度始终为 4,下面的代码将起作用,但事实并非如此(有时没有前缀,有时长度为 5)。

pd.Series(df["Name"]).str.slice(4)

我该怎么做?

如果你知道模式,你可以使用extract来获得干净的名字:

# The "dirty" CSV
string = """
(3.) Peter
(10.) David
Jane
(100.) Mary Wether
"""
df = pd.read_csv(StringIO(string), header=None, names=['Name'])

# Clean it
df['CleanName'] = df['Name'].str.extract(r'(\(.*\) )?(?P<Name>.+?)( \(.*\))?')['Name']

结果:

                 Name    CleanName
0          (3.) Peter        Peter
1         (10.) David        David
2                Jane         Jane
3  (100.) Mary Wether  Mary Wether

前往 Regex 101 了解正则表达式模式的解释。