如何在 Python 的数据框中编码分类变量(系列)?

Posted

技术标签:

【中文标题】如何在 Python 的数据框中编码分类变量(系列)?【英文标题】:How to encode a categorical variable (series) in the data frame in Python? 【发布时间】:2014-02-12 05:07:12 【问题描述】:

我有一本如下形式的字典:

CA: California, NV: Nevada, TX: Texas

我想转换我的数据框


 'state':['California', 'California, 'Texas', 'Nevada', 'Texas],
 'var':[100,200,300,400, 500]

进入


 'state':['CA','CA','TX','NV','TX'],
 'var':[100,200,300,400,500]

最好的方法是什么?

【问题讨论】:

【参考方案1】:

如果您颠倒了 dict 中的键和值,那么您可以使用 map:

# to swap the keys and values:
new_map = dict (zip(my_dict.values(),my_dict.keys()))

然后调用地图:

df.state = df.state.map(new_map)

这假设您的密钥存在于地图中,否则您将获得 KeyError 提升

所以创建数据框:

In [12]:

df = pd.DataFrame(
 'state':['California', 'California', 'Texas', 'Nevada', 'Texas'],
 'var':[100,200,300,400, 500]
)

df
Out[12]:
        state  var
0  California  100
1  California  200
2       Texas  300
3      Nevada  400
4       Texas  500

[5 rows x 2 columns]

你的听写:

my_dict = 'CA': 'California', 'NV': 'Nevada', 'TX': 'Texas'

反转键和值

new_dict = dict(zip(my_dict.values(), my_dict.keys()))

现在调用 map 来执行查找并分配回状态:

In [13]:

df.state = df.state.map(new_dict)
df
Out[13]:
  state  var
0    CA  100
1    CA  200
2    TX  300
3    NV  400
4    TX  500

[5 rows x 2 columns]

如果您担心某些值可能不存在,那么您可以在 dict 上使用get,以便它处理KeyError 并将None 作为值分配:

用'New York'设置一个新的df

In [19]:

df = pd.DataFrame(
 'state':['California', 'California', 'Texas', 'Nevada', 'Texas', 'New York'],
 'var':[100,200,300,400, 500, 600]
)
df
Out[19]:
        state  var
0  California  100
1  California  200
2       Texas  300
3      Nevada  400
4       Texas  500
5    New York  600

[6 rows x 2 columns]

现在改为拨打get

In [25]:

df.state = df.state.map(lambda x: new_dict.get(x))
df
Out[25]:
  state  var
0    CA  100
1    CA  200
2    TX  300
3    NV  400
4    TX  500
5  None  600

[6 rows x 2 columns]

【讨论】:

我还有一些字典中没有的状态。如果我应用 map(),则新系列中的相应值将丢失。我可以以某种方式指定我想为字典中不存在的值应用标识函数,即保持原样吗? @P.Escondido 所以对于上面的例子,因为纽约不在你希望它留在纽约的字典中,这是正确的吗?您可以创建一个执行地图查找的函数,如果键不存在则不执行任何操作,或者您可以过滤数据框中要分配的值,仅过滤字典中存在的值并转换它们。 没错!我该怎么做? @P.Escondido 我的答案通过使用 get 来解决。

以上是关于如何在 Python 的数据框中编码分类变量(系列)?的主要内容,如果未能解决你的问题,请参考以下文章

如何仅对数据框中的分类数据进行编码

如何从数据框中的分类变量中找到定量变量的平均值? [复制]

如何在h2o数据框中添加新的分类变量

Pandas 数据框中的分类变量?

如何在 R 中对多个分类变量进行一次热编码

将列添加到数据框中,测试其他列中的分类变量