如何使用正则表达式在pandas中查找字符串格式的数组?

2024-05-13 09:32:24 发布

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

我有一个csv文件,其中只包含一列,看起来像这样 df1型

Col_A
Name
Address
[B00-OUI_001]
Soemthing else
etc.

还有一个是这样的。你知道吗

df2型

Col_B
[B00-OUI_000_V]
[B00-OUI_002_V]
[B00-OUI_003_V] 
[B00-OUI_001_V]
[B00-OUI_005_V]
[B00-OUI_006_V]
[B00-OUI_007_V]

我试图从df1中的df2中找出匹配的条目,比如B00-OUI_001在这两个df中都是,但在df2中它是带有_V的,所以它变成了正则表达式,因为所有内容都是字符串格式的,但在精确匹配方面一直失败。有人能帮我吗?你知道吗


Tags: 文件csvname内容dfaddressetc条目
2条回答

如果只有“\u V”可以破坏精确匹配,为什么不去掉它并创建一个伪列索引呢?精确连接总是比任何正则表达式映射的孩子都要快。你知道吗

我的意思是:

df2["Col_B_edt"]=df2["Col_B"].str.replace("_V]", "]")

df3=pd.merge(df,df2,left_on="Col_A",right_on="Col_B_edt").drop("Col_B_edt", axis=1)

输出:

   Col_A          Col_B
0  [B00-OUI_001]  [B00-OUI_001_V]

您可以删除两列中的尾部[],并使用^{}和元组进行筛选:

tups = tuple(df1['Col_A'].str.strip('[]').unique())

df2 = df2[df2['Col_B'].str.strip('[]').str.startswith(tups)]
print (df2)
            Col_B
3  [B00OUI_001_V]

另一个想法是通过|为regex OR连接唯一值并使用^{}

v = '|'.join(df1['Col_A'].str.strip('[]').unique())

df2 = df2[df2['Col_B'].str.strip('[]').str.contains(v)]
print (df2)
            Col_B
3  [B00OUI_001_V]

相关问题 更多 >