我有以下表格的字典:
{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]
}
最好的方法是什么?
答案 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]