首页 > 解决方案 > 列表匹配中大小写不同的计数问题

问题描述

    Name Text
0   K    IeatApple
1   Y    bananaisdelicious
2   B    orangelikesomething 
3   Q    blueBanana
4   C    appleislike

我想匹配数据框中的“文本”列和列表。

但是,“文本”列中的小写字母和大写字母没有区别。因此,为了捕获所有这些,列表更改为正则表达式,如下所示。

mylist = [apple, banana]
mylist = [f"(?i){re.escape(k)}" for k in mylist]
#contain matching list - column
extracted = df['text'].str.findall(f'({"|".join(mylist)})').apply(set)

#Matched words are added to the data frame as column.
df['matching'] = extracted.str.join(',')

#keyword counting
s = pd.DataFrame(extracted.tolist()).stack().value_counts()
print(s)

Apple 1
Banana 1
banana 1
apple 1

这样做的一个问题是它以不同的方式识别“apple”和“Apple”。

有没有办法同时匹配大小写字母并拼写同一个单词?

标签: pythonregexpandasnumpy

解决方案


一个想法是将值转换为小写:

mylist = [apple, banana]
mylist = [f"(?i){re.escape(k.lower())}" for k in mylist]

extracted = df['text'].str.lower().str.findall(f'({"|".join(mylist)})').apply(set)

推荐阅读