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

如何在Pandas中应用文本特征提取函数填充DataFrame列?

嘿,这个场景我太熟悉了!我来给你分享几个Pandas里高效实现的方法,比你手动逐个更新列要省心多了~

先明确你的需求核心

你需要把每个文本对应的1000个单词存在性(True/False),转换成DataFrame的1000个特征列,对吧?下面分情况给你解决方案:

方法一:简单直接的 apply + pd.Series

如果你的数据量不算特别大(比如几万行以内),这个方法最容易上手,不用额外依赖其他库:

首先假设你的提取函数是这样的(模拟你的逻辑):

def extract_features(text):
    # 这里是你的1000个目标单词列表
    target_words = ["apple", "banana", "orange", ...]  # 替换成你的实际词汇
    return {word: word in text.lower() for word in target_words}

然后直接把函数应用到text列,把返回的字典转成Series,再和原DataFrame合并:

import pandas as pd

# 假设你的原始DataFrame是df
df = pd.DataFrame({
    "text": ["I love apple pie", "Banana is my favorite", "Orange juice is fresh"],
    "result": [1, 0, 1]
})

# 生成特征列DataFrame
features_df = df["text"].apply(lambda x: pd.Series(extract_features(x)))

# 合并到原DataFrame
df = pd.concat([df, features_df], axis=1)

这样生成的features_df里,每个单元格就是对应单词是否出现在该行文本中的布尔值,直接合并就搞定了~

方法二:高效的CountVectorizer(推荐大规模数据)

如果你的DataFrame行数很多(比如几十万甚至更多),上面的apply逐行处理会比较慢。这时候可以用sklearn的CountVectorizer,它是专门做文本特征提取的优化工具,速度快很多:

from sklearn.feature_extraction.text import CountVectorizer

# 同样是你的1000个目标单词列表
target_words = ["apple", "banana", "orange", ...]

# 初始化向量器:指定词汇表,开启binary模式(只记录存在/不存在)
vectorizer = CountVectorizer(vocabulary=target_words, binary=True)

# 把text列转换成特征矩阵,再转成DataFrame
features_df = pd.DataFrame(
    vectorizer.fit_transform(df["text"]).toarray(),
    columns=vectorizer.get_feature_names_out(),
    index=df.index  # 保持和原DataFrame索引一致,避免合并出错
)

# 把0/1转换成布尔值(可选,看你需求)
features_df = features_df.astype(bool)

# 合并到原DataFrame
df = pd.concat([df, features_df], axis=1)

这个方法底层是用优化过的C语言实现的,处理大规模数据的效率比apply高几个量级,非常推荐!

如果已经创建了默认False的列怎么办?

如果你已经提前创建了所有特征列(默认都是False),想要批量更新符合条件的单元格,虽然可以这么做,但不推荐(因为逐行修改DataFrame性能很差):

# 先获取每行的特征字典
features_series = df["text"].apply(extract_features)

# 遍历每行更新
for idx, feature_dict in features_series.items():
    # 筛选出值为True的单词
    true_words = [word for word, is_present in feature_dict.items() if is_present]
    # 更新该行的这些列为True
    df.loc[idx, true_words] = True

还是建议你用前面两种方法直接生成特征列,再替换掉你原来的默认列,这样效率高得多。


内容的提问来源于stack exchange,提问作者Ala Głowacka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:15:35