【问题标题】:Pandas generating features vector with apply()Pandas 使用 apply() 生成特征向量
【发布时间】:2015-07-26 05:06:33
【问题描述】:

我有一个具有两个特征的数据集:类(int)和内容(文本)。

每一行内容都需要向量化为一组与正则表达式匹配的布尔特征。我的矢量化函数返回一个包含 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 ...

在真实的单词数据集(约 1 毫米行)中,这需要很长时间!

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

我真的是 sklearn/pandas 的新手,所以很可能我做错了什么。

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

谢谢!

【问题讨论】:

    标签: python scikit-learn pandas


    【解决方案1】:

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

    # 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
    

    【讨论】:

      猜你喜欢
      • 2011-01-06
      • 1970-01-01
      • 2018-08-18
      • 1970-01-01
      • 2015-06-30
      • 2012-12-05
      • 1970-01-01
      • 1970-01-01
      • 2016-04-02
      相关资源
      最近更新 更多