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

时间:2014-01-22 08:35:57

标签: python join dictionary merge pandas

我有以下表格的字典:

{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 个答案:

答案 0 :(得分:3)

如果你颠倒了字典中的键和值,那么你可以使用map

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

然后调用map:

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]