gpt4 book ai didi

python - 如何计算数据框行中单词列表的出现次数总和?

转载 作者:太空宇宙 更新时间:2023-11-03 20:48:51 25 4
gpt4 key购买 nike

我想计算列表中每行给定数据框列中单词的出现次数。

代码:

 d2 = {}
for key, lst in dict_.items():
col_names = [element for element in lst if isinstance(element, str)]
regex_lists = [element for element in lst if isinstance(element, list)]
regex_list = functools.reduce(lambda x, y: x+y, regex_lists)
map_function = lambda s: len(re.findall(r'|'.join(regex_list).lower(), str(s).lower()))
df_regex_count = df[col_names].applymap(map_function)
df[key] = [sum(lst_tmp) for lst_tmp in df_regex_count.values.tolist()]

我的数据框是:

 d = {'Column_1': ['mango juice pret Orange No manner  Emman snow', ' préts No  scan eblanc'],}
df = pd.DataFrame(data=d)

我的单词列表

list_1 = ['mango juice', 'Mango' ,'Orange', 'pr[éeêè]t[s]?']
dict = {"s1": ['Column_1', list_1]}

s1的输出是[3,1],但它必须是[4,1]。因为“芒果汁”,芒果,橙子,漂亮

dictionary

创建 csv 文件列表。

df['Word'] = r'\b' + df[' Word'].astype(str) + r'\b'
df.groupby('Country').agg(",".join).reset_index()
group1 =df[df['Country']== 1]
list1.append("|".join(group1['Word']))

ListWithout('|').

最佳答案

re.findall返回字符串中模式的所有非重叠匹配。
这意味着在模式中搜索匹配项时会消耗该字符串。因此,如果匹配的子字符串本身就是匹配,则会丢失。

这就是您的情况下 'mango''mango Juice' 所发生的情况,因为您的正则表达式组合了所有要与 or 匹配的字符串.

如果您想查找重叠的情况,请勿将要搜索的单词与正则表达式中的 | 组合起来,而是对每个单词执行搜索。

def map_function(s, reglst):
matches = [len(re.findall(rg.lower(), s.lower())) for rg in reglst]
return sum(matches)

在这里我重新定义了您的map_function。它使用列表理解对 regex_list 的每个单词执行一次 re.findall 并返回所有出现次数的总和。

那么你的代码将是:

for key, lst in dict_.items():
col_names = [element for element in lst if isinstance(element, str)]
regex_lists = [element for element in lst if isinstance(element, list)]
regex_list = functools.reduce(lambda x, y: x+y, regex_lists)
df_regex_count = df[col_names].applymap(lambda s : map_function(s, regex_list))
df[key] = [sum(lst_tmp) for lst_tmp in df_regex_count.values.tolist()]

现在df s:

                                        Column_1  s1
0 mango juice pret Orange No manner Emman snow 4
1 préts No scan eblanc 1

编辑

您需要您的正则表达式列表list1类似于:

list1 = [r'\bmango juice\b', r'\bMango\b' ,r'\bOrange\b', r'\bpr[éeêè]t[s]?\b']

这是一个列表,每个元素一个单词。查看您的代码,您可能可以通过以下方式创建它:

df['Word'] = r'\b' + df[' Word'].astype(str) + r'\b'
df.groupby('Country').agg(",".join).reset_index()
group1 =df[df['Country']== 1]
list1.extend(group1['Word'])

关于python - 如何计算数据框行中单词列表的出现次数总和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56398069/

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