如何检查dataframe列中的子字符串是否存在于同一dataframe中另一列的子字符串中?

2024-10-03 00:16:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个dataframe,其中的列如下:

  A                               B
0  - 5923FoxRd                    5923 Fox Rd
1 631 Newhaven Ave                Modesto
2 Saratoga Street, Suite 200      Saratoga Street, Suite 200

我想用a中的值创建一个与B中的值匹配的列表。该列表应该看起来像[-5923FoxRd,Saratoga Street,Suite 200…]。最简单的方法是什么


Tags: 方法streetdataframe列表rdsuitefoxave
1条回答
网友
1楼 · 发布于 2024-10-03 00:16:33

要让一点走得更远,请执行以下操作:

  1. 为每个列创建一个新系列,并将正则表达式模式\W+传递给str.replace()
  2. 使用str.lower()
  3. 创建替换列表以将drive规范化为dravenue规范化为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']

这就是s1s2的样子:

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

相关问题 更多 >