如何在pandas DataFrame中添加填充值的新列且避免出现NaN?
解决pandas添加列出现NaN的问题
问题原因
你直接将lang Series赋值给df0的新列时,pandas是按**索引(index)**匹配数据的:
df0的索引是['A','B','C','D']lang的索引是国家名['Iraq','Pakistan','UAE','UK']
两者索引完全不匹配,所以赋值后新列全为NaN。
修复方法
方法1:使用map匹配(最简便)
通过df0的GOV列值,去匹配lang的索引取值:
df0 = pd.DataFrame ({ 'GOV': [ 'Iraq' , 'Pakistan' , 'UAE' , 'UK' ] , 'CAPITAL' : [ 'Baghdad' , 'Islamabad' , 'DUBAI' , 'LONDON' ], 'POPULATION' : [100 , 300 , 120 , 150]}, columns = ['GOV' , 'CAPITAL' , 'POPULATION']) df0.index = ['A' , 'B' , 'C' , 'D'] lang = pd.Series(['Arabic', 'Urdu' , 'Arabic' , 'English'] ,index = ['Iraq' , 'Pakistan' , 'UAE' , 'UK'] , name = 'language') # 关键修复代码 df0['language'] = df0['GOV'].map(lang)
运行后df0的language列会正确填充为['Arabic', 'Urdu', 'Arabic', 'English']。
方法2:使用merge关联
把lang转成DataFrame,再通过GOV列进行左连接:
df0 = pd.DataFrame ({ 'GOV': [ 'Iraq' , 'Pakistan' , 'UAE' , 'UK' ] , 'CAPITAL' : [ 'Baghdad' , 'Islamabad' , 'DUBAI' , 'LONDON' ], 'POPULATION' : [100 , 300 , 120 , 150]}, columns = ['GOV' , 'CAPITAL' , 'POPULATION']) df0.index = ['A' , 'B' , 'C' , 'D'] lang = pd.Series(['Arabic', 'Urdu' , 'Arabic' , 'English'] ,index = ['Iraq' , 'Pakistan' , 'UAE' , 'UK'] , name = 'language') # 关键修复代码 lang_df = lang.reset_index().rename(columns={'index': 'GOV'}) df0 = df0.merge(lang_df, on='GOV', how='left')
这种方法适合后续需要扩展更多关联字段的场景。
内容的提问来源于stack exchange,提问作者Wisam_Saeed
相关产品推荐
相关产品推荐

