我正在尝试计算Pandas DataFrame列中字符的出现次数。例如,我想总共知道该字符A出现在列中的次数。当存在非字母数字字符时,会发生此问题。
这是一个最小的可重现示例:
import pandas as pd
df = pd.DataFrame(data = ['AA', 'BA', 'ABA'], columns = ['col1'])
charset = set("".join(list(df['col1'])))
print(charset)
这是列中的字符集:
{'B', 'A'}
for char in charset:
print(char, ' ', sum(df['col1'].str.count(char)))
这是每个字符出现在列中的次数:
B 2
A 5
再次尝试相同的操作,除了一些非字母数字字符:
df2 = pd.DataFrame(data = ['AA+', 'BA', 'ABA('], columns = ['col1'])
charset = set("".join(list(df2['col1'])))
print(charset)
如预期的那样,字符集:
{'(', 'B', '+', 'A'}
但是现在尝试计算字符失败:
for char in charset:
print(char, ' ', sum(df2['col1'].str.count(char)))
error: missing ), unterminated subpattern at position 0
是否有某种方法可以转义非字母数字字符,或者获得我正在寻找的计数?
因为输入的Series.str.count是正则表达式,所以可以使用re.escape:
df2 = pd.DataFrame(data = ['AA+', 'BA', 'ABA('], columns = ['col1'])
#list is not necessary
charset = set("".join(df2['col1']))
print(charset)
{'(', 'B', 'A', '+'}
import re
for char in charset:
#used pandas sum
print(char, ' ', df2['col1'].str.count(re.escape(char)).sum())
( 1
B 2
A 5
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。