为了账号安全,请及时绑定邮箱和手机立即绑定

Python 熊猫:映射并返回 Nan

Python 熊猫:映射并返回 Nan

慕容森 2021-08-24 19:16:12
我有两个数据框,第一个是:id code1   22   33   34   1第二个是:id code  name1    1   Mary2    2   Ben3    3   John我想映射数据框 1,使其看起来像:id code  name1   2    Ben2   3    John3   3    John4   1    Mary我尝试使用此代码:mapping = dict(df2[['code','name']].values)df1['name'] = df1['code'].map(mapping)我的映射是正确的,但是映射值都是NAN:mapping = {1:"Mary", 2:"Ben", 3:"John"}id code  name1   2    NaN2   3    NaN3   3    NaN4   1    NaN谁能知道为什么要解决?
查看完整描述

2 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

问题是列中的值类型不同,code因此有必要将astype两者中的相同类型转换为整数或字符串:


print (df1['code'].dtype)

object


print (df2['code'].dtype)

int64

print (type(df1.loc[0, 'code']))

<class 'str'>


print (type(df2.loc[0, 'code']))

<class 'numpy.int64'>

mapping = dict(df2[['code','name']].values)

#same dtypes - integers

df1['name'] = df1['code'].astype(int).map(mapping)

#same dtypes - object (obviously strings)

df2['code'] = df2['code'].astype(str)

mapping = dict(df2[['code','name']].values)

df1['name'] = df1['code'].map(mapping)

print (df1)

   id code  name

0   1    2   Ben

1   2    3  John

2   3    3  John

3   4    1  Mary


查看完整回答
反对 回复 2021-08-24
?
GCT1015

TA贡献1827条经验 获得超4个赞

另一种方法是使用 dataframe.merge


df.merge(df2.drop(['id'],1), how='left', on=['code'])

输出:


    id  code   name

0   1   2      Ben

1   2   3      John

2   3   3      John

3   4   1      Mery


查看完整回答
反对 回复 2021-08-24
  • 2 回答
  • 0 关注
  • 255 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信