Edw*_*ard 3 python dictionary numpy
我这样做
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'] ]
Run Code Online (Sandbox Code Playgroud)
和
KeyError: nan
Run Code Online (Sandbox Code Playgroud)
我试图改变dtypes
df['a'] = df['a'].astype(object)
Run Code Online (Sandbox Code Playgroud)
但又来了
KeyError: nan
Run Code Online (Sandbox Code Playgroud)
怎么了?
问题是,nan"不是一个数字",因此它不等于其他数字,甚至不是另一个数字.你可以在这里阅读更多相关信息.
展示:
from numpy import nan
nan == nan
=> False
Run Code Online (Sandbox Code Playgroud)
从这一点来看,必须遵循南不在你的词典中,因为它不等于任何键.
@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
Run Code Online (Sandbox Code Playgroud)
如果要将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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4288 次 |
| 最近记录: |