【问题标题】:Unable to fit_transform data from csv file in sklearn无法从 sklearn 中的 csv 文件中 fit_transform 数据
【发布时间】:2017-04-25 05:57:56
【问题描述】:

我正在尝试在 Scikit-learn 中学习一些分类。但是,我无法弄清楚这个错误是什么意思。

import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer

data_frame = pd.read_csv('data.csv', header=0) 
data_in_numpy = data_frame.values 

c = CountVectorizer()
c.fit_transform(data_in_numpy.data)

这会引发错误:

NotImplementedError: multi-dimensional sub-views are not implemented

我该如何解决这个问题?我的 csv 文件中的一条记录如下所示:

Time   Directors    Actors   Rating   Label
123    Abc, Def     A, B,c    7.2      1

我想这个错误是由于 Director 或 Actors 列下有多个值。 任何帮助,将不胜感激。 谢谢,

【问题讨论】:

    标签: pandas machine-learning scikit-learn classification sklearn-pandas


    【解决方案1】:

    根据the docstring,sklearn.feature_extraction.text.CountVectorizer 将:

    将文本文档集合转换为令牌计数矩阵

    那么,我想知道你为什么要输入数值?

    尝试仅转换字符串(导演和演员):

    data_in_numpy['X'] = data_frame[['Directors', 'Actors']].apply(lambda x: ' '.join(x), axis=1)
    data_in_numpy = data_frame['X'].values
    

    不过,首先,您可能希望通过删除逗号来清理数据。

    data_frame['Directors'] = data_frame['Directors'].str.replace(',', ' ')
    data_frame['Actors'] = data_frame['Actors'].str.replace(',', ' ')
    

    【讨论】:

    • 现在它会引发 AttributeError 错误:'numpy.ndarray' 对象没有属性 'lower' 虽然我可以适应变换一个特征但不能超过一个。 c.fit_transform(d['Writer'].values) 但是,c.fit_transform(d[['Actors', 'Directors']].values) 引发 AttributeError: 'numpy.ndarray' object has no attribute 'lower' .
    • 那么计数矢量化器只需要一列数据。您应该分别执行每个操作或创建一个新的 df 列进行转换。请查看我对答案所做的更改。
    猜你喜欢
    • 1970-01-01
    • 2014-01-27
    • 2020-06-13
    • 1970-01-01
    • 2022-11-16
    • 2014-11-06
    • 2020-03-19
    • 2017-03-30
    相关资源
    最近更新 更多