从数据框字符串列中提取特定单词并存储在 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]
我尝试了.split
和findall
的不同变体,但不知道如何获得一个只有Over
或Under
的新列,请帮助!
【问题讨论】:
【参考方案1】:.str
是pd.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 的新列中的主要内容,如果未能解决你的问题,请参考以下文章