gpt4 book ai didi

python - Pandas:使函数映射部分字典匹配

转载 作者:行者123 更新时间:2023-12-01 04:32:26 27 4
gpt4 key购买 nike

此函数查看 pandas 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))

想法:

如果可以直接修改函数以接受部分匹配,那就太好了。

否则,解决方案可能是首先替换字符串中的匹配单词 - 保持字符串的其余部分完整 - 然后将正则表达式子字符串与字典进行匹配。这些步骤可能发生在临时列中,以便列“Name”仍处于其原始状态以供将来使用。

最佳答案

我想这可能就是您正在寻找的。

df = pd.DataFrame(["BULL GOOGLE X3 VON", "BEAR TWITTER 12X S"], columns ["Name"])

#Dict
google = {"GOOG":"Google"}
twitter = {"TWITT":"Twitter"}
dictionary = google.copy()
dictionary.update(twitter)

#Regex
regex = re.compile(r"\b((%s)\S*)\b" %"|".join(dictionary.keys()), re.I)

def dictionary_lookup(match):
return dictionary[match.group(2)]

#Function
def f(value):
match = dictionary[regex.search(value).group(2)]
#Do stuff
statement = regex.sub(dictionary_lookup, value)
return statement

#Map Function
df["Statement"] = df["Name"].map(lambda x:f(x))

这将匹配以字典中的键之一开头的任何单词,将字典中的匹配值分配给变量 match然后返回原始字符串并替换匹配的单词。

关于python - Pandas:使函数映射部分字典匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32189964/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com