該函數查看熊貓的字符串DataFrame
。如果字符串包含與字典中的條目相匹配的正則表達式,則會將捕獲的字符串傳遞給函數的其他部分,最後返回statement
。熊貓:製作功能地圖部分字典匹配
def f(value):
f1 = lambda x: dictionary[regex.findall(x)[0]] if regex.findall(x)[0] in dictionary else ""
match = f1(value)
#Do stuff
return statement
問題:
我怎樣才能使它接受部分匹配,更換匹配的單詞,同時保持字符串的其餘部分完好?現在它只接受文字比賽。
目標:
的字符串是"BULL GOOGLE X3 VON"
。我希望字典中的{"GOOG":
足以將單詞轉換爲:"Google"}
。轉換後的字符串將是"BULL Google X3 VON"
,並且該函數將通過"Google"
。
注:我想繼續使用dict
作爲實現,因爲程序的其他部分依賴於它。
代碼:
#DataFrame
df = pd.DataFrame(["BULL GOOGLE X3 VON", "BEAR TWITTER 12X S"], columns=["Name"])
#Dict
google = {"GOOG":"Google"}
twitter = {"TWITT":"Twitter"}
dictionary = goog.copy()
dictionary.update(twitter)
#Regex
regex = re.compile(r"\s(\S+)\s", flags=re.IGNORECASE)
#Function
def f(value):
f1 = lambda x: dictionary[regex.findall(x)[0]] if regex.findall(x)[0] in dictionary else ""
match = f1(value)
#Do stuff
return statement
#Map Function
df["Statement"] = df["Name"].map(lambda x:f(x))
思路:
如果可以直接修改函數接受部分匹配,那將是一件好事。
否則,一個解決方案可能是首先replace
字符串中的匹配字 - 保持字符串的其餘部分不變 - 然後將正則表達式子字符串與字典匹配。這些步驟可能發生在臨時列中,因此列"Name"
仍處於其原始狀態以備將來使用。
你不能只用'contains'嗎? – JohnE