使用apply()生成特征向量的熊猫

时间:2015-07-26 05:06:34

标签: python scikit-learn pandas

我有一个包含两个功能的数据集:class(int)和content(text)。

需要将每行内容向量化为一组与正则表达式匹配的布尔特征。我的矢量化函数返回一个包含17个特征的字典,如:

{'email':1, 'phone':0, 'curses':1,....}

现在我的代码是:

vectorized = data[['content', 'class']].join(
    pd.DataFrame(
        data.content.apply(lambda c: vectorize_content(c)).tolist(),
        dtype = int,
        index = data.index
    )
)

期望的结果是:

class content            email phone curse ...
    0 'Hi'               0     0     0 ...
    1 'john@doe.com'     1     0     0 ...

在真正的单词数据集(~1mm行)中,这需要很长时间!

我的目标是拥有一个包含类的最终数据集,并将每个布尔特征作为列来提供RandomForestClassifier。

我对sklearn / pandas真的很陌生,所以我很可能做错了。

有关如何优化此过程的任何提示?

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为使用此代码可以更快地运行。

# Simulate function
def vectorize_content(c):
    return {'email':1, 'phone':0, 'curses':1}
# Simulate test data
data = pd.DataFrame({'class': [0,1], 'content': ['Hi','john@doe.com']})

vectorized = pd.concat([data, vectorized['content'].apply(lambda c: pd.Series(vectorize_content(c)))], axis=1)

# Result
   class       content  curses  email  phone
0      0            Hi       1      1      0
1      1  john@doe.com       1      1      0