【发布时间】:2018-02-23 01:42:01
【问题描述】:
我正在尝试为我的数据帧编码 one-hot。这是一个多维数组,我不知道该怎么做。数据框可能如下所示:
df = pd.DataFrame({'menu': [['Italian', 'Greek'], ['Japanese'], ['Italian','Greek', 'Japanese']], 'price': ['$$', '$$', '$'], 'location': [['NY', 'CA','MI'], 'CA', ['NY', 'CA','MA']]})
我想要的输出是这样的:
df2 = pd.DataFrame({'menu': [[1,1,0], [0,0,1], [1,1,1]], 'price': [[1,0], [1,0], [0,1]], 'location': [[1,1,1,0], [0,1,0,0], [1,1,0,1]]})
我不确定如何使用 pd.get_dummies 或 scikit-learn 来完成。 有人能帮我吗?
【问题讨论】:
-
处理数据框中的列表是使用 pandas 时最不想做的事情。这是一个糟糕的设计 - 考虑放弃它。
-
你可以看看MultiLabelBinarizer和我的answer here如何使用它。但缺点是您必须使用单独的 MultiLabelBinarizer 对象处理每一列。此外,您可能需要将列中的非列表项更改为
CA到[CA]之类的列表,因为这就是其中所需要的。 -
你能给出所有可能的位置值吗?
-
@EspoirMurhabazi 就本例而言,我假设所有地点现在都是:NY、CA、MI、MA。
-
@cᴏʟᴅsᴘᴇᴇᴅ 感谢您的反馈。你能告诉我是否有更好的方法来看待这个问题?如果 pandas 是一个不好的开始方式,那么将我的数据集转换为其他格式没有问题。我只是不知道哪种方法最好。
标签: python pandas scikit-learn vectorization one-hot-encoding