如何检查 pandas 数据框列中的子字符串是否存在于同一数据框中另一列的子字符串中?
How to check if a substring in a pandas dataframe column exists in a substring of another column in the same dataframe?
我有一个包含如下列的数据框:
A B
0 - 5923FoxRd 5923 Fox Rd
1 631 Newhaven Ave Modesto
2 Saratoga Street, Suite 200 Saratoga Street, Suite 200
我想创建一个列表,其中包含与 B 中的值相匹配的 A 中的值。该列表应类似于 [- 5923FoxRd, Saratoga Street, Suite 200...]。最简单的方法是什么?
要让一点点走得更远,请执行以下操作:
- 为每一列创建一个新系列并将正则表达式模式
\W+
传递给 str.replace()
- 使用
str.lower()
- 创建替换列表以将
drive
规范化为 dr
,avenue
规范化为 ave
,等等
s1 = df['A'].str.replace('\W+', '').str.lower()
s2 = df['B'].str.replace('\W+', '').str.lower()
lst = [*df[s1==s2]['A']]
lst
Out[1]: ['- 5923FoxRd', 'Saratoga Street, Suite 200']
这是 s1
和 s2
的样子:
print(s1,s2)
0 5923foxrd
1 631newhavenave
2 saratogastreetsuite200
Name: A, dtype: object
0 5923foxrd
1 modesto
2 saratogastreetsuite200
Name: B, dtype: object
从那里,您可能想要创建一些替换值以进一步规范化您的数据,例如:
to_replace = ['drive', 'avenue', 'street']
replaced = ['dr', 'ave', 'str']
to_replace = ['drive', 'avenue', 'street']
replaced = ['dr', 'ave', 'str']
s1 = df['A'].str.replace('\W+', '').str.lower().replace(to_replace, replaced, regex=True)
s2 = df['B'].str.replace('\W+', '').str.lower().replace(to_replace, replaced, regex=True)
lst = [*df[s1==s2]['A']]
lst
print(s1,s2)
0 5923foxrd
1 631newhavenave
2 saratogastrsuite200
Name: A, dtype: object
0 5923foxrd
1 modesto
2 saratogastrsuite200
Name: B, dtype: object
我有一个包含如下列的数据框:
A B
0 - 5923FoxRd 5923 Fox Rd
1 631 Newhaven Ave Modesto
2 Saratoga Street, Suite 200 Saratoga Street, Suite 200
我想创建一个列表,其中包含与 B 中的值相匹配的 A 中的值。该列表应类似于 [- 5923FoxRd, Saratoga Street, Suite 200...]。最简单的方法是什么?
要让一点点走得更远,请执行以下操作:
- 为每一列创建一个新系列并将正则表达式模式
\W+
传递给str.replace()
- 使用
str.lower()
- 创建替换列表以将
drive
规范化为dr
,avenue
规范化为ave
,等等
s1 = df['A'].str.replace('\W+', '').str.lower()
s2 = df['B'].str.replace('\W+', '').str.lower()
lst = [*df[s1==s2]['A']]
lst
Out[1]: ['- 5923FoxRd', 'Saratoga Street, Suite 200']
这是 s1
和 s2
的样子:
print(s1,s2)
0 5923foxrd
1 631newhavenave
2 saratogastreetsuite200
Name: A, dtype: object
0 5923foxrd
1 modesto
2 saratogastreetsuite200
Name: B, dtype: object
从那里,您可能想要创建一些替换值以进一步规范化您的数据,例如:
to_replace = ['drive', 'avenue', 'street']
replaced = ['dr', 'ave', 'str']
to_replace = ['drive', 'avenue', 'street']
replaced = ['dr', 'ave', 'str']
s1 = df['A'].str.replace('\W+', '').str.lower().replace(to_replace, replaced, regex=True)
s2 = df['B'].str.replace('\W+', '').str.lower().replace(to_replace, replaced, regex=True)
lst = [*df[s1==s2]['A']]
lst
print(s1,s2)
0 5923foxrd
1 631newhavenave
2 saratogastrsuite200
Name: A, dtype: object
0 5923foxrd
1 modesto
2 saratogastrsuite200
Name: B, dtype: object