如何在 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 的数据框中编码分类变量(系列)?的主要内容,如果未能解决你的问题,请参考以下文章