【发布时间】:2017-08-09 14:08:14
【问题描述】:
在下面的示例中,我能够将包含文本数据的 pandas 列与多个字符串集合进行匹配。输出只会告诉我df.col1 单元格的任何部分是否包含集合中的元素之一。它不会告诉我是哪一个!我有兴趣得到准确的信息(字符串匹配或更好的是它在集合数组中的位置)
words = ['dog', 'monkey']
pat = "|".join(map(re.escape, words))
df = pd.DataFrame({'col1':['lion bites dog','dog bites monkey','monkey bites man','man bites apple']})
df.loc[df.col1.str.contains(pat),'col1']
我需要知道集合中的哪个字符串(上面的单词)匹配的原因是集合的每个元素都可以映射到一个数值。喜欢
words_dict = {'dog':'1', 'monkey':'2'}
我也许可以尝试df.map(dict),但在实际情况下,集合存储在pandas dataframe 中
words_df = pd.DataFrame({1:['dog'], 2:['monkey']})
我可以想到一个相当迂回的解决方案,即迭代地检查集合中的每个元素,但如果集合中的元素数量很大,这似乎效率非常低。
编辑//
所需的输出可以是:
[0,0,1,NaN] or ['dog','dog','monkey',False]
【问题讨论】:
标签: python regex string pandas numpy