Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中对数据帧中的分类变量(系列)进行编码?_Python_Join_Dictionary_Merge_Pandas - Fatal编程技术网

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

如何在Python中对数据帧中的分类变量(系列)进行编码?,python,join,dictionary,merge,pandas,Python,Join,Dictionary,Merge,Pandas,我有一本以下形式的词典: {CA: California, NV: Nevada, TX: Texas} 我想转换我的数据帧 { 'state':['California', 'California, 'Texas', 'Nevada', 'Texas], 'var':[100,200,300,400, 500] } 进入 最好的方法是什么?如果您颠倒了dict中的键和值,则可以使用: 然后调用映射: df.state = df.state.map(new_map) 这假设您的密钥存在

我有一本以下形式的词典:

{CA: California, NV: Nevada, TX: Texas}
我想转换我的数据帧

{
 'state':['California', 'California, 'Texas', 'Nevada', 'Texas],
 'var':[100,200,300,400, 500]
}
进入


最好的方法是什么?

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

然后调用映射:

df.state = df.state.map(new_map)
这假设您的密钥存在于地图中,如果不存在,您将引发
keyrorm

因此,创建数据帧:

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
,以便它处理
键错误
,并将
None
指定为值:

使用“纽约”设置新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因此,对于上面的例子,因为纽约不在字典中,您希望它保持不变,因为纽约是正确的吗?您可以创建一个执行映射查找的函数,如果没有键,则不执行任何操作,或者您可以过滤数据帧中要分配给的值,仅过滤dict中存在的值并转换这些值。完全正确!我该怎么做?@P.Escondido我的答案通过使用
get
来解决这个问题。
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]
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]