【问题标题】:Extract sub-string between 2 special characters from one column of Pandas DataFrame从 Pandas DataFrame 的一列中提取 2 个特殊字符之间的子字符串
【发布时间】:2017-10-15 11:10:26
【问题描述】:

我有一个这样的 Python Pandas DataFrame:

Name  
Jim, Mr. Jones
Sara, Miss. Baker
Leila, Mrs. Jacob
Ramu, Master. Kuttan 

我想只从名称列中提取名称标题并将其复制到一个名为标题的新列中。输出 DataFrame 如下所示:

Name                    Title
Jim, Mr. Jones          Mr
Sara, Miss. Baker       Miss
Leila, Mrs. Jacob       Mrs
Ramu, Master. Kuttan    Master

我正在尝试使用正则表达式找到解决方案,但未能找到正确的结果。

【问题讨论】:

  • 你想如何解析Lastname, Anna MariaRamu, Master Kuttan
  • 我只想解析名称标题。这意味着“,”和“”之间的子字符串。”

标签: python regex pandas


【解决方案1】:
In [157]: df['Title'] = df.Name.str.extract(r',\s*([^\.]*)\s*\.', expand=False)

In [158]: df
Out[158]:
                   Name   Title
0        Jim, Mr. Jones      Mr
1     Sara, Miss. Baker    Miss
2     Leila, Mrs. Jacob     Mrs
3  Ramu, Master. Kuttan  Master

In [163]: df['Title'] = df.Name.str.split(r'\s*,\s*|\s*\.\s*').str[1]

In [164]: df
Out[164]:
                   Name   Title
0        Jim, Mr. Jones      Mr
1     Sara, Miss. Baker    Miss
2     Leila, Mrs. Jacob     Mrs
3  Ramu, Master. Kuttan  Master

【讨论】:

  • @raja,很高兴它有帮助:)
【解决方案2】:

看看str.extract

您要查找的正则表达式是(?<=, )\w+(?=.)。用文字表示:取前面有,(但不包括)的子字符串,至少包含一个单词字符,并以.(但不包括)结尾。将来,使用在线正则表达式测试器,例如regex101;这样,正则表达式就变得相当简单了。

这是假设Name 列中的每个条目的格式相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-10
    • 2021-03-19
    • 2021-12-15
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多