【发布时间】:2017-01-10 12:22:10
【问题描述】:
我有一个读取的 csv 文件
import pandas
df = pd.read_csv("inputfile")
有些列是数字,有些是字符串。让我们调用其中一个数字列'num' 和一个字符串'col'。我想做以下事情:
- 我希望能够对一个名为
'col'的字符串列进行一次热编码,并生成一个包含所有特征的稀疏矩阵。 - 我想对
df['num']进行一次热编码,但仅限于df['num'] < 100。
如果输入在字典列表中,这很容易做到。
步骤 1. 在您运行 DictVectorizer 时自动发生
第 2 步。 只需要我在必要时迭代字典,为新的字符串功能 'num_cat' 添加键/值对,然后在整个新字典列表上运行 DictVectorizer。
我坚持以下:
- 我需要由 one-hot-encoding 产生的矩阵是稀疏的。如果有大量类别,pd.get_dummies 会非常非常慢。它会创建一个密集矩阵然后使其稀疏吗?因此,我觉得我无法使用它。
- 我可以在不先将数据框转换为字典列表然后运行 DictVectorizer 的情况下执行我需要的操作吗?如果没有,是否有一种简单的方法来进行转换?
【问题讨论】:
-
“col”是否只包含分类值?你也可以使用sklearn的
OneHotEncoder。我不知道它是否会比get_dommies更快。以下是一些示例:stackoverflow.com/questions/38978853/onehotencoding-mapping/…
标签: python csv pandas scikit-learn