python - 如何按不同的值对一个 Pandas 数据框列的元素进行切片?
问题描述
我有一个“脏”的 csv 文件加载到 Pandas 数据框中。一列“名称”有时带有前缀(例如,实际名称前的“(3.)”)。
我了解此前缀的分类法,并且知道如何找到索引,从该索引开始我想保留字符串的其余部分:
df["Indexes"]= df["Name"].str.find(')')
但是:我如何减少对那个索引的限制?
例如,如果“Name”是“(3.) Peter”,我希望它变成“Peter”。
假设,我想使用切片。我的问题是我需要切片的值每行不同。-- 如果前缀的长度始终为 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了解正则表达式模式的解释。
推荐阅读
- c# - Is there memory Leak in Serializer
- java - 定理基础的算术
- android - 如何将字符串颜色更改为颜色资源?
- search - 使用 store=True 计算布尔字段不在 Odoo11 中搜索
- amazon-web-services - 如何在 AWS EC2 上的 Tensorflow 中设置 MirroredStrategy 以进行对象检测再训练?
- shopify - Shopify 获取产品的最新单条评论
- python - 尝试使用 aws lambda 运行 import pytube 时出错
- wildfly-swarm - thorntail uberjar : 引用外部模块
- c - 如何使用 ibverbs 接收以太网帧?
- javascript - undefined is not a function (evaluating this.function() in react native