KeyError:dict

时间:2016-08-12 22:08:21

标签: python numpy dictionary

我做如下

import numpy as np
from numpy import nan
df = pd.DataFrame({'a':[1, 2, 0, 1, np.nan, 2, 0]})
mapper = {2.0: 0.0, 1.0: 1.0 ,0.0: 2.0, nan : nan}
df['a'] = [ mapper[x] for x in df['a'] ]

KeyError: nan

我试图改变dtypes

df['a'] = df['a'].astype(object)

但是再次

KeyError: nan

出了什么问题?

2 个答案:

答案 0 :(得分:6)

问题在于,nan不是数字"并且因此它不等于其他数字,甚至不是另一个数字。您可以阅读更多相关信息here

演示:

from numpy import nan
nan == nan
=> False

从这一点来看,必须遵循南方不在你的词典中,因为它不等于任何一个键。

答案 1 :(得分:3)

@ shx2解释了为什么会发生这种情况。但你仍然可以做你想做的事 - 忘记NaN并使用Series.map

import numpy as np
import pandas as pd

df = pd.DataFrame({'a': [1, 2, 0, 1, np.nan, 2, 0]})
mapper = {2.0: 0.0, 1.0: 1.0 ,0.0: 2.0}
df['a'] = df['a'].map(mapper)
print(df)

#      a
# 0  1.0
# 1  0.0
# 2  2.0
# 3  1.0
# 4  NaN
# 5  0.0
# 6  2.0

如果您想将NaN条目映射到55,请使用.fillna()

df['a'] = df['a'].fillna(55)
print(df)

#       a
# 0   1.0
# 1   0.0
# 2   2.0
# 3   1.0
# 4  55.0
# 5   0.0
# 6   2.0