如何比较熊猫中的两个字符串变量?

时间:2016-03-11 12:57:09

标签: python string pandas

我的Pandas数据集中有两个字符串列

name1

我需要检查name2是否等于mask=df.name1==df.name2。 我现在使用的天真方式是使用简单的面具

name1

但问题是可能存在错误标记的字符串(以不可预测的方式 - 数据太大)阻止完全匹配。

例如" John Doe"和" John Doe"不匹配。当然,我修剪了琴弦,但是还有其他可能性。

一个想法是查看name2中是否包含str.contains。但似乎我不能将isin与另一个变量用作参数。还有其他想法吗?

非常感谢!

编辑:使用test = pd.DataFrame({'A': ["john doe", " john doe", 'John'], 'B': [' john doe', 'eddie murphy', 'batman']}) test Out[6]: A B 0 john doe john doe 1 john doe eddie murphy 2 John batman test['A'].isin(test['B']) Out[7]: 0 False 1 True 2 False Name: A, dtype: bool 会产生非感性效果。 实施例

▶ str = "[ho ho] Hello everyone [hi hi], hello world [ha ha]"
▶ str.gsub /\s*\[.*?\]\s*/, ''
#⇒ "Hello everyone, hello world"

4 个答案:

答案 0 :(得分:5)

我认为您可以将str.lowerstr.replace与任意空格s/+一起使用:

test = pd.DataFrame({'A': ["john  doe", " john doe", 'John'], 
                     'B': [' john doe', 'eddie murphy', 'batman']})

print test['A'].str.lower().str.replace('s/+',"") == 
      test['B'].str.strip().str.replace('s/+',"")


0     True
1    False
2    False
dtype: bool

答案 1 :(得分:3)

document.addEventListener('scroll', onScroll); function onScroll () { var scrollPosition = window.scrollY, showHeaderPosition = 100; // Determine if position is at a certain point if (scrollPosition >= showHeaderPosition) { showHeader(); } else { hideHeader(); } } 空格和strip案例:

lower

答案 2 :(得分:2)

您可以使用difflib计算距离

import difflib as dfl
dfl.SequenceMatcher(None,'John Doe', 'John doe').ratio()

编辑:与Pandas集成:

import pandas as pd
import difflib as dfl
df = pd.DataFrame({'A': ["john doe", " john doe", 'John'], 'B': [' john doe', 'eddie murphy', 'batman']})
df['VAR1'] = df.apply(lambda x : dfl.SequenceMatcher(None, x['A'], x['B']).ratio(),axis=1)

答案 3 :(得分:1)

您想要的是基于编辑工作UPDATE table_name SET date_of_item = FROM_UNIXTIME_WITH_NEGATIVE_DATES(date_of_item, "%d %b %Y") WHERE date_of_item IS NOT NULL 的字符串距离,我们称之为distance(s1, s2)。在命名空间中定义该函数后,您可以执行以下操作:

edit distance of strings

在Google搜索中,出现了以下内容:

https://pypi.python.org/pypi/editdistance

这是一个动态编程问题,因此您也可以通过自己编写来挑战自己。但它可能效率不高。