首页 > 解决方案 > 如何按不同的值对一个 Pandas 数据框列的元素进行切片?

问题描述

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

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

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

但是:我如何减少对那个索引的限制?

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

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

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

我怎样才能做到这一点?

标签: pythonpandasslice

解决方案


如果您知道模式,则可以使用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了解正则表达式模式的解释。


推荐阅读