如何从Python中的字符串中提取字符?

问题描述 投票:1回答:4

我需要让一些名称格式匹配,以便稍后在我的脚本中合并。我的列'Name'是从csv导入的,包含如下名称:

安东尼奥布朗

LeSean McCoy

Le'Veon Bell

对于我的脚本,我想获得名字的第一个字母,并将其与姓氏结合起来....

A.Brown

L.McCoy

L.Bell

以下是我现在每次返回NaaN的内容:

ff['AbbrName'] = ff['Name'].str.extract('([A-Z]\s[a-zA-Z]+)', expand=True)

谢谢!

python regex string python-3.x pandas
4个回答
7
投票

使用str.replace方法与^([A-Z]).*?([a-zA-Z]+)$的另一种选择; ^([A-Z])捕获字符串开头的第一个字母; ([a-zA-Z]+)$匹配最后一个单词,然后通过在第一个捕获组和第二个捕获组之间添加.来重建名称:

df['Name'].str.replace(r'^([A-Z]).*?([a-zA-Z]+)$', r'\1.\2')
#0    A.Brown
#1    L.McCoy
#2     L.Bell
#Name: Name, dtype: object

4
投票

如果你只是apply()一个函数将被第一个空格分开并获得第一个单词的第一个字符添加其余的内容怎么办:

import pandas as pd


def abbreviate(row):
    first_word, rest = row['Name'].split(" ", 1)
    return first_word[0] + ". " + rest


df = pd.DataFrame({'Name': ['Antonio Brown', 'LeSean McCoy', "Le'Veon Bell"]})
df['AbbrName'] = df.apply(abbreviate, axis=1)
print(df)

打印:

            Name  AbbrName
0  Antonio Brown  A. Brown
1   LeSean McCoy  L. McCoy
2   Le'Veon Bell   L. Bell

2
投票

即使没有正则表达式,这应该足够简单。使用字符串拆分和串联的组合。

df.Name.str[0] + '.' + df.Name.str.split().str[-1]

0    A.Brown
1    L.McCoy
2     L.Bell
Name: Name, dtype: object

如果Name柱有可能具有前导空间,则用df.Name.str[0]替换df.Name.str.strip().str[0]

警告:列必须至少有两个名称。


0
投票

你得到NaaN,因为你的正则表达式与名字不匹配。

相反,我会尝试以下方法:

parts = ff[name].split(' ')
ff['AbbrName'] = parts[0][0] + '.' + parts[1]
© www.soinside.com 2019 - 2024. All rights reserved.