无法将dataframe列映射到字典条目

时间:2018-04-19 18:46:27

标签: python dictionary dataframe

我期待以下代码生成:

SPEC     DATATYPE  DIRECTION  SPEC_PTERM
Eye      Micro     East       Peeper
HindLimb Clin      East       Leg
Nose     Micro     West       Snoz
Test8    Clin      South      UNMAPPED 

相反,它产生:

SPEC     DATATYPE  DIRECTION  SPEC_PTERM
Eye      Micro     East       UNMAPPED 
HindLimb Clin      East       Snoz 
Nose     Micro     West       UNMAPPED 
Test8    Clin      South      UNMAPPED 

此代码段有什么问题?

specData = pd.DataFrame([['Nose', 'Snoz'],['HindLimb','Leg'],['Eye','Peeper']], columns=['SPEC', 'SPEC_PREFERRED'])
new_df = pd.DataFrame ([['Eye','Micro', 'East'],['HindLimb','Clin', 'East'],['Nose','Micro', 'West'],['Test8', 'Clin', 'South']], columns=['SPEC', 'DATATYPE', 'DIRECTION'])

s = specData.set_index('SPEC')['SPEC_PREFERRED']
new_df['SPEC_PTERM'] = df['SPEC'].map(s).fillna('UNMAPPED')

1 个答案:

答案 0 :(得分:0)

以下是使用join方法解决问题的方法:

specData = pd.DataFrame([['Nose', 'Snoz'],['HindLimb','Leg'],['Eye','Peeper']], columns=['SPEC', 'SPEC_PREFERRED'])
new_df = pd.DataFrame ([['Eye','Micro', 'East'],['HindLimb','Clin', 'East'],['Nose','Micro', 'West'],['Test8', 'Clin', 'South']], columns=['SPEC', 'DATATYPE', 'DIRECTION'])

s = specData.set_index('SPEC')['SPEC_PREFERRED']
new_df = (new_df.join(s, 'SPEC')
                .fillna('UNMAPPED')
                .rename(columns={'SPEC_PREFERRED': 'SPEC_PTERM'}))
print(new_df)
#        SPEC DATATYPE DIRECTION SPEC_PTERM
# 0       Eye    Micro      East     Peeper
# 1  HindLimb     Clin      East        Leg
# 2      Nose    Micro      West       Snoz
# 3     Test8     Clin     South   UNMAPPED