python - 你能扩展 pandas.get_dummies 中的假人列表吗?
问题描述
假设我有以下数据集(2 行,2 列,标题是 Char0 和 Char1):
dataset = [['A', 'B'], ['B', 'C']]
columns = ['Char0', 'Char1']
df = pd.DataFrame(dataset, columns=columns)
我想对 Char0 和 Char1 列进行一次热编码,所以:
df = pd.concat([df, pd.get_dummies(df["Char0"], prefix='Char0')], axis=1)
df = pd.concat([df, pd.get_dummies(df["Char1"], prefix='Char1')], axis=1)
df.drop(['Char0', "Char1"], axis=1, inplace=True)
这会产生一个带有列标题 Char0_A、Char0_B、Char1_B、Char1_C 的数据框。
现在,我想对每一列都有 A、B、C 和 D 的指示(尽管数据集中目前没有“D”)。在这种情况下,这意味着 8 列:Char0_A、Char0_B、Char0_C、Char0_D、Char1_A、Char1_B、Char1_C、Char1_D。
有人可以帮帮我吗?
解决方案
与所有列一起使用get_dummies
,然后添加由以下DataFrame.reindex
创建的所有可能的列组合itertools.product
:
dataset = [['A', 'B'], ['B', 'C']]
columns = ['Char0', 'Char1']
df = pd.DataFrame(dataset, columns=columns)
vals = ['A','B','C','D']
from itertools import product
cols = ['_'.join(x) for x in product(df.columns, vals)]
print (cols)
['Char0_A', 'Char0_B', 'Char0_C', 'Char0_D', 'Char1_A', 'Char1_B', 'Char1_C', 'Char1_D']
df1 = pd.get_dummies(df).reindex(cols, axis=1, fill_value=0)
print (df1)
Char0_A Char0_B Char0_C Char0_D Char1_A Char1_B Char1_C Char1_D
0 1 0 0 0 0 1 0 0
1 0 1 0 0 0 0 1 0
推荐阅读
- excel - Excel 365 函数/公式名称得到翻译。如何避免?
- ios - JSON 文件中的 TableView - 对数据进行排序
- node.js - 无法检索项目:未知错误。请联系支持。Heroku nodejs
- javascript - 为什么我的状态没有在这个组件中设置
- html - 如何从 express => html 发送数据
- javascript - 如何在 discord.js 中制作循环命令?
- json - Ruby - 尝试使用嵌套散列迭代散列(在反序列化 JSON 对象之后)
- javascript - 如何选择第一个可用选项
- typescript - Typescript 使用路径来引用与文件路径不同的文件夹中的类型
- python - 简单的scapy脚本不发送数据包