亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 294 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號