我做如下
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
出了什么问题?
答案 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