[英]How to find an array in string format in pandas using regular expression?
我有一個 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
,因此它轉向正則表達式,因為所有內容都是字符串格式,但在完全匹配中失敗。 有人可以幫助我嗎?
您可以刪除兩列中的尾隨[]
並使用帶元組的Series.str.startswith
過濾:
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]
另一個想法是通過|
加入獨特的價值|
對於正則表達式OR
並使用Series.str.contains
:
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]
如果只有“_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]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.