You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计DF行中字母出现次数并构建26列特征矩阵?

解决方案:统计DataFrame每行字符串的字母出现次数

下面提供两种成熟的实现方法,按需选择:

方法1:简洁直观的apply+Counter方案

适合中小规模数据,代码可读性强:

import pandas as pd
from collections import Counter
import string

# 示例原DataFrame(替换成你的实际数据)
df = pd.DataFrame({'text': ['this is a string', 'hello world', 'python pandas']})

# 生成a-z的字母列表,作为新DataFrame的列名
alphabet = list(string.ascii_lowercase)

# 定义每行的字母统计函数
def count_single_row(s):
    # 统一转小写,避免大小写干扰
    s_lower = s.lower()
    # 统计字符出现次数
    char_counter = Counter(s_lower)
    # 按字母顺序返回次数,未出现的字母返回0
    return pd.Series([char_counter.get(letter, 0) for letter in alphabet], index=alphabet)

# 逐行应用函数,生成统计结果的DataFrame
letter_count_df = df['text'].apply(count_single_row)

# 可选:把统计结果和原DataFrame合并
final_df = pd.concat([df, letter_count_df], axis=1)

方法2:矢量化高效方案

如果你的数据量很大,apply的循环效率较低,用矢量化操作更快:

import pandas as pd
import string

df = pd.DataFrame({'text': ['this is a string', 'hello world', 'python pandas']})
alphabet = list(string.ascii_lowercase)

# 拆分字符→转哑变量→按原索引求和→按字母顺序整理列
letter_count_df = (df['text'].str.lower()
                   .str.split('', expand=True)  # 把字符串拆成单个字符的列
                   .stack()  # 转成层级索引的Series
                   .str.get_dummies()  # 生成每个字符的哑变量
                   .sum(level=0)  # 按原行索引求和
                   [alphabet])  # 按a-z顺序筛选列

final_df = pd.concat([df, letter_count_df], axis=1)

注意事项

  • 如果需要区分大小写,去掉代码中的.lower(),同时把alphabet改成list(string.ascii_letters)(包含大小写共52列),但你的需求是26列,所以统一转大小写更合适。
  • 字符串中的非字母字符(比如空格、标点)会被自动忽略,不会计入统计。

内容的提问来源于stack exchange,提问作者Tam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 21:15:33