簡體   English   中英

如何使用正則表達式在熊貓中查找字符串格式的數組?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM