gpt4 book ai didi

python - 从 pandas 中的虚拟变量重建分类变量

转载 作者:太空宇宙 更新时间:2023-11-03 21:15:17 24 4
gpt4 key购买 nike

pd.get_dummies 允许将分类变量转换为虚拟变量。除了重建分类变量很简单之外,是否有一种首选/快速的方法来做到这一点?

最佳答案

已经过去几年了,所以这很可能不在 pandas 中。最初问这个问题时的工具包,但这种方法对我来说似乎更容易一些。 idxmax将返回与最大元素对应的索引(即带有 1 的元素)。我们做axis=1因为我们想要 1 所在的列名发生。

编辑:我没有费心将其分类而只是一个字符串,但是您可以像 @Jeff 一样通过用 pd.Categorical 包装它来做到这一点。 (和 pd.Series ,如果需要的话)。

In [1]: import pandas as pd

In [2]: s = pd.Series(['a', 'b', 'a', 'c'])

In [3]: s
Out[3]:
0 a
1 b
2 a
3 c
dtype: object

In [4]: dummies = pd.get_dummies(s)

In [5]: dummies
Out[5]:
a b c
0 1 0 0
1 0 1 0
2 1 0 0
3 0 0 1

In [6]: s2 = dummies.idxmax(axis=1)

In [7]: s2
Out[7]:
0 a
1 b
2 a
3 c
dtype: object

In [8]: (s2 == s).all()
Out[8]: True

编辑回应@piRSquared的评论:该解决方案确实假设有一个 1每行。我认为这通常是一种格式。 pd.get_dummies如果有 drop_first=True 则可以返回全为 0 的行或者如果有NaN值和dummy_na=False (默认)(我遗漏了什么情况?)。全零的行将被视为第一列中指定的变量的实例(例如上例中的 a)。

如果drop_first=True ,您无法仅从虚拟数据框中知道“第一个”变量的名称是什么,因此该操作是不可逆的,除非您保留额外的信息;我建议离开drop_first=False (默认)。

dummy_na=False是默认值,这肯定会导致问题。 请设置dummy_na=True当您调用pd.get_dummies时如果您想使用此解决方案来反转“虚拟化”并且您的数据包含任何 NaNs .设置dummy_na=True总是添加一个“nan”列,即使该列全是0,所以你可能不想设置它,除非你实际上有 NaN s。一个不错的方法可能是设置 dummies = pd.get_dummies(series, dummy_na=series.isnull().any()) 。同样好的一点是 idxmax解决方案将正确重新生成您的 NaN s(不仅仅是一个表示“nan”的字符串)。

还值得一提的是设置 drop_first=Truedummy_na=False意味着NaN与第一个变量的实例无法区分,因此如果您的数据集可能包含任何 NaN ,则强烈建议不要这样做。值。

关于python - 从 pandas 中的虚拟变量重建分类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54761333/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com