删除出现在其他列中的单词,Pandas
Posted
技术标签:
【中文标题】删除出现在其他列中的单词,Pandas【英文标题】:Remove words that appear in other column, Pandas 【发布时间】:2014-05-07 22:49:17 【问题描述】:从一个列中的字符串中删除另一列中出现的单词的过程是什么?
例如:
Sr A B C
1 jack jack and jill and jill
2 run you should run, you should ,
3 fly you shouldnt fly,there you shouldnt ,there
可以看出我想要column C
,就是B减去A的内容。请注意第三个示例,其中 fly
后跟逗号,因此还应考虑标点符号(如果代码更倾向于检测其周围的空格)。Column A
也可以有 2 个单词,所以这些需要删除。
我需要 Pandas 中的表达式,例如:
df.apply(lambda x: x["C"].replace(r"\b"+x["A"]+r"\b", "").strip(), axis=1)
【问题讨论】:
A 列是否总是包含一个单词?如果它有更多的单词,我们是否必须在第 2 列中找到确切的字符串作为匹配项?或者它可能是字符串的随机排列? 精确匹配,以防有 2 个单词。A 中的“fly there”应该匹配 B 中的“fly there”并将其删除.. I had the same problem and these answers weren't working for me (got "bad escape error", but this answer worked. 【参考方案1】:这看起来怎么样?
In [24]: df
Out[24]:
Sr A B
0 1 jack jack and jill
1 2 run you should run,
2 3 fly you shouldnt fly,there
[3 rows x 3 columns]
In [25]: df.apply(lambda row: row.B.strip(row.A), axis=1)
Out[25]:
0 and jill
1 you should run,
2 ou shouldnt fly,there
dtype: object
【讨论】:
应该这样——?? df['C'] = 你的表情?? 看起来这个表达式是在“字母到字母”的基础上进行计算的。如果有一个词说 "lynch" ,当它与 "fly" 比较时,它会从 lynch 中删除 "ly" .. 我不想要那个 .. 也许单词边界排序可能会有所帮助.. 是的,您可能需要使用正则表达式。还要正确地捕捉标点符号。稍后我会再看一遍。 哦,没问题..一旦它按预期对我有用,我会接受你的回答。【参考方案2】:试试这个:
x['C'] = x['B'].replace(to_replace=r'\b'+x['A']+r'\b', value='',regex=True)
它基于 previous answer 和 someone 告诉我如何在 pandas 中完全做到这一点。我做了一点改动以适应当前的情况:)
【讨论】:
以上是关于删除出现在其他列中的单词,Pandas的主要内容,如果未能解决你的问题,请参考以下文章
根据每个句子的第一个单词将 pandas 数据框列中的字符串列表分解为新列
用于以任何出现顺序匹配具有多个单词的列中的字符串的 Coredata 谓词