如何用Python统计字符串中字母出现次数并保存到DataFrame新列
问题分析与解决方案
原始DataFrame
| dnaseq |
|---|
| CCGGTA |
| ATGCGT |
预期结果
统计每行dnaseq列中'C'的出现次数,生成新列Count:
| dnaseq | Count |
|---|---|
| CCGGTA | 2 |
| ATGCGT | 1 |
错误代码分析与修正
第一段代码错误原因与修正
你的第一段代码问题在于**count变量在循环外初始化,每次循环会累加所有行的'C'总数,最后把这个总数赋值给整个Count列**,导致所有行都显示总和。
修正方法:把count的初始化放到循环内部,每次处理一行时重置计数,并且只给当前行赋值Count:
for index, row in df.iterrows(): count = 0 # 每行处理前重置计数 a = row['dnaseq'] for i in a: # 不需要转成list,字符串本身可迭代 if i == 'C': count += 1 df.loc[index, 'Count'] = count # 赋值给当前行的Count列
第二段代码错误原因与修正
第二段代码的问题是每次循环都把当前行的统计结果赋值给整个Count列,最后一次循环的结果会覆盖所有行的数据。
修正方法:同样,只给当前行的Count列赋值:
from collections import Counter for index, row in df.iterrows(): a = row['dnaseq'] b = Counter(a) df.loc[index, 'Count'] = b['C'] # 赋值给当前行的Count列
更高效的Pandas矢量化方案
用iterrows遍历行效率较低,推荐使用Pandas内置的字符串方法str.count(),一行代码搞定:
df['Count'] = df['dnaseq'].str.count('C')
这个方法是矢量化操作,比循环快很多,尤其当DataFrame行数较多时优势明显。
内容的提问来源于stack exchange,提问作者Harshita Choudhary
相关产品推荐
相关产品推荐

