df1['city'] = df1['city'].map({'BJ':'北京','SH':'上海','CQ':'重庆'})
df1
那是因为df1中城市名显示为NaN的那些城市不是字典中三个城市的缘故。
import pandas as pd
df=pd.DataFrame({'city':['YT','BJ','SH','CQ'],'number':[11002,32100,28600,22387]})
#print(df)
df['city'] = df['city'].map({'BJ': '北京', 'SH': '上海', 'CQ': '重庆'})
#print(df)
df
city number
0 NaN 11002
1 北京 32100
2 上海 28600
3 重庆 22387
可能是因为city这一列还有其他的分类, 如果数据量大,可以试试用nunique()看看有几类.
下面两种方法, 可以比较下replace替换和map替换的差异:
import pandas as pd
import numpy as np
data = pd.DataFrame({'city':['BJ','SH','CQ','WH','BJS']})
print(data['city'].nunique())
data['替换1'] = data['city'].replace(['BJ','SH','CQ'],['北京','上海','重庆'])
data['替换2'] = data['city'].map({'BJ':'北京','SH':'上海','CQ':'重庆'})
print(data)
city 替换1 替换2
0 BJ 北京 北京
1 SH 上海 上海
2 CQ 重庆 重庆
3 WH WH NaN
4 BJS BJS NaN