我的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"
答案 0 :(得分:5)
我认为您可以将str.lower
和str.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
这是一个动态编程问题,因此您也可以通过自己编写来挑战自己。但它可能效率不高。