string - Pandas:打印“匹配”而不是仅打印布尔结果
问题描述
我有一个包含文本和子字符串的列。目标是遍历文本,如果有匹配项,我想在新列中打印该匹配项,而不是仅查找 True/False 语句。如何做到这一点?当前代码:
sLength = len(dfEx5)
substring = ['AmericanAir', 'JetBlue', 'SouthwestAir', 'united','USAirways', 'VirginAmerica']
dfEx5['mentions'] = pd.Series(1, index=dfEx5.index) #Add a new column 'mentions' with 1's
pd.options.mode.chained_assignment = None #To deal with the 'SettingWithCopyWarning'
dfEx5['mentions'] = next((substring for substring in dfEx5['text'] if substring in dfEx5['text']), True)
dfEx5['text']
一个在哪里pandas.core.series.Series
。
解决方案
使用apply
方法传递自定义函数:
substring = ['AmericanAir', 'JetBlue', 'SouthwestAir', 'united','USAirways', 'VirginAmerica']
df= pd.DataFrame([["AmericaAir5","JetBlue2"],["JetBlue2","SouthwestAir"]],columns=['text','what'])
def searchr(x,s):
for i in s:
if x.find(i)+1:
return i
else:
continue
df["mentions"]=df['text'].apply(searchr,args=(substring,))
或者,您可以使用正则表达式:
import re
r = re.compile('('+"|".join(substring)+')')
df["m"] = df.text.str.extract(r)
第一种方法似乎比正则表达式 str concat 更快
推荐阅读
- mysql - mysql 选择加入 4 个表
- python-3.x - 如何矢量化创建具有基于其他列的值的新列?
- tomcat - Tomcat Catalina 日志文件自定义
- java - 来自 REST 的 @DateTimeFormat 变量给出 null
- javascript - 如何提取 div 文本以供以后在 Cypress 中使用?
- javascript - 如果子项在垂直列表中处于活动状态,则保持导航菜单打开
- django - Django & intercooler.js : 使用 Intercooler.js 将变量传递给视图
- amazon-web-services - 无法制作 S3 对象,使用 Lambda 从另一个账户上的 S3 存储桶复制,公共
- javascript - 我正在尝试将 JSON 对象发布到 ASP.NET MVC 控制器但得到空 JSON
- python - SMTPAuthenticationError: (535, b'5.7.8 用户名和密码不被接受。了解详情\n5.7.8 https://support.google