从数据框字符串列中提取特定单词并存储在 Python 的新列中

Posted

技术标签:

【中文标题】从数据框字符串列中提取特定单词并存储在 Python 的新列中【英文标题】:Pulling specific word from dataframe string column and storing in new column in Python 【发布时间】:2022-01-05 14:30:45 【问题描述】:

我有一个 Python 数据框列 Name,其元素始终包含名字、姓氏和单词“over”或“under”

例如:Name = [Michael Johnson Over, Michael Johnson Under, John Smith Over, John Smith Under]

我正在尝试创建一个新列 Name2,它从 Name 中提取“Over”或“Under”

所以对于上面的例子Name2 = [Over, Under, Over, Under]

我尝试了.splitfindall 的不同变体,但不知道如何获得一个只有OverUnder 的新列,请帮助!

【问题讨论】:

【参考方案1】:

.strpd.Series 上的一个属性,它公开了字符串解析功能,例如.contains。您可以使用布尔索引设置一个新列,条件是"Name" 中的行是否包含关键字"Over""Under"

import pandas as pd
df = pd.DataFrame(
    
        "Name": [
            "Michael Johnson Over",
            "Michael Johnson Under",
            "John Smith Over",
            "John Smith Under"
        ],
    
)

df["Name2"] = None
df["Name2"][df["Name"].str.contains("Over")] = "Over"
df["Name2"][df["Name"].str.contains("Under")] = "Under"
print(df)

输出

    Name                    Name2
0   Michael Johnson Over    Over
1   Michael Johnson Under   Under
2   John Smith Over         Over
3   John Smith Under        Under

【讨论】:

这很好用!谢谢!有没有办法将“Over”或“Under”之前的名称提取到另一个新列中? 是的,df["Name3"] = None df["Name3"][over_mask] = df["Name"][over_mask].str.slice(0, -4) df["Name3"][under_mask] = df["Name"][under_mask].str.slice(0, -5)【参考方案2】:

您可以使用 Pandas rsplit 从末尾拆分字符串,并使用 n 参数将输出中的拆分数限制为 1。您还可以使用expand=True 将字符串拆分为单独的列。

df[['First_Last','Name2']] = df['Name'].str.rsplit(' ', n=1, expand=True)

输出

                    Name       First_Last  Name2
0   Michael Johnson Over  Michael Johnson   Over
1  Michael Johnson Under  Michael Johnson  Under
2        John Smith Over       John Smith   Over
3       John Smith Under       John Smith  Under

【讨论】:

以上是关于从数据框字符串列中提取特定单词并存储在 Python 的新列中的主要内容,如果未能解决你的问题,请参考以下文章

从pandas DataFrame中另一列中的位置给定的字符串列中提取字符[重复]

字符串列包含通过 spark scala 精确匹配的单词

替换两个特定单词之间的某个值

从 pyspark 数据框中的列中提取特定字符串

从pdf文件中提取特定数据

在pandas中提取包含多行和多列的JSON字符串列的部分