Ame*_*ina 17 python pandas scikit-learn
假设我在Pandas中有一个数据帧,如下所示:
> my_dataframe
col1 col2
A foo
B bar
C something
A foo
A bar
B foo
Run Code Online (Sandbox Code Playgroud)
其中,行代表实例,列输入功能(未显示有目标的标签,但这将是一个分类任务),也就是我试图建立X出来的my_dataframe.
我怎样才能有效地使用例如DictVectorizer?
我是否需要先将DataFrame中的每个条目转换为字典?(这就是上面链接示例中的方式).有没有更有效的方法来做到这一点?
alk*_*lko 21
首先,我没有得到样本数组中的哪些特征,以及观察结果.
其次,不DictVectorizer保留数据,仅涉及转换实用程序和元数据存储.转换后,它存储功能名称和映射.它返回一个numpy数组,用于进一步的计算.Numpy数组(特征矩阵)大小等于features countx number of observations,其值等于观察的特征值.因此,如果您了解自己的观察和特征,则可以按照自己喜欢的方式创建此阵列.
如果你希望sklearn为你做,你不必手动重建dict,因为它可以to_dict应用于转置数据帧:
>>> df
col1 col2
0 A foo
1 B bar
2 C foo
3 A bar
4 A foo
5 B bar
>>> df.T.to_dict().values()
[{'col2': 'foo', 'col1': 'A'}, {'col2': 'bar', 'col1': 'B'}, {'col2': 'foo', 'col1': 'C'}, {'col2': 'bar', 'col1': 'A'}, {'col2': 'foo', 'col1': 'A'}, {'col2': 'bar', 'col1': 'B'}]
Run Code Online (Sandbox Code Playgroud)
自scikit-learn 0.13.0(2014年1月3日)以来'records',该to_dict()方法有一个新参数,所以现在您可以简单地使用此方法而无需额外的操作:
>>> df = pandas.DataFrame({'col1': ['A', 'B', 'C', 'A', 'A', 'B'], 'col2': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar']})
>>> df
col1 col2
0 A foo
1 B bar
2 C foo
3 A bar
4 A foo
5 B bar
>>> df.to_dict('records')
[{'col2': 'foo', 'col1': 'A'}, {'col2': 'bar', 'col1': 'B'}, {'col2': 'foo', 'col1': 'C'}, {'col2': 'bar', 'col1': 'A'}, {'col2': 'foo', 'col1': 'A'}, {'col2': 'bar', 'col1': 'B'}]
Run Code Online (Sandbox Code Playgroud)
你绝对可以使用DictVectorizer.因为DictVectorizer需要可迭代的dict类似对象,所以可以执行以下操作:
from sklearn.base import TransformerMixin
from sklearn.pipeline import make_pipeline
from sklearn.feature_extraction import DictVectorizer
class RowIterator(TransformerMixin):
""" Prepare dataframe for DictVectorizer """
def fit(self, X, y=None):
return self
def transform(self, X):
return (row for _, row in X.iterrows())
vectorizer = make_pipeline(RowIterator(), DictVectorizer())
# now you can use vectorizer as you might expect, e.g.
vectorizer.fit_transform(df)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19605 次 |
| 最近记录: |