Mig*_*488 5 python nlp list python-3.x pandas
我有一个pandas.Series
像这样的句子:
0 mi sobrino carlos bajó conmigo el lunes
1 juan antonio es un tio guay
2 voy al cine con ramón
3 pepe el panadero siempre se porta bien conmigo
4 martha me hace feliz todos los días
Run Code Online (Sandbox Code Playgroud)
另一方面,我有一个像这样的名字和姓氏列表:
l = ['juan', 'antonio', 'esther', 'josefa', 'mariano', 'cristina', 'carlos']
我想将系列中的句子与列表中的名称相匹配。实际数据比这个例子大得多,所以我认为系列和列表之间的元素比较不会有效,所以我创建了一个包含名称列表中所有字符串的大字符串,如下所示:
'|'.join(l)
我尝试创建一个布尔掩码,稍后允许我通过 true 或 false 值索引包含名称列表中名称的句子,如下所示:
series.apply(lambda x: x in '|'.join(l))
Run Code Online (Sandbox Code Playgroud)
但它返回:
0 False
1 False
2 False
3 False
4 False
Run Code Online (Sandbox Code Playgroud)
这显然不行。
我也尝试使用,str.contains()
但它的行为不像我预期的那样,因为此方法将查看名称列表中是否存在系列中的任何子字符串,这不是我需要的(即我需要完全匹配)。
你能在这里指出我正确的方向吗?
非常感谢您提前
如果需要精确匹配,您可以使用单词边界:
\nseries.str.contains('|'.join(rf"\\b{x}\\b" for x in l))\n
Run Code Online (Sandbox Code Playgroud)\n要按列表删除值,请使用生成器理解,并通过分割文本仅过滤不匹配的值:
\nseries = series.apply(lambda x: ' '.join(y for y in x.split() if y not in l))\nprint (series)\n \n0 mi sobrino baj\xc3\xb3 conmigo el lunes\n1 es un tio guay\n2 voy al cine con ram\xc3\xb3n\n3 pepe el panadero siempre se porta bien conmigo\n4 martha me hace feliz todos los d\xc3\xadas\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
111 次 |
最近记录: |