You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 09:32:36